繁体   English   中英

AJAX POST到PHP JSON错误

[英]AJAX POST to PHP JSON error

首先,我知道StackOverflow上有很多非常相似的帖子。 我已经浏览了所有这些文件,但仍然无法解决此问题。

我有一个用户填写的表单,由于非常严格的JavaScript验证(必须保留在原位),一两次失败后,用户很可能不得不返回该表单。 提交表单会触发JavaScript函数进行验证,然后再使用AJAX将数据发布到PHP。

本质上,这都是在一页上发生的。 一旦AJAX请求关闭,页面上就会有一个通过jQuery加载的隐藏div,同时,表单本身随后也被隐藏了。 该页面根据从AJAX POST(通过$ _POST)接收到的数据设置PHP变量,并将此信息通过cURL发送给API。

我正在调试“ formData”对象,然后用AJAX将其发布,它已成功捕获了我的信息,并且似乎是有效的对象。

使用dataType:'text'时,AJAX POST本身是成功的。 但是,我需要dataType:'json'。 将dataType:'json'添加到我的AJAX POST之后,立即返回以下错误:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

我的代码如下:

JAVASCRIPT / AJAX / JQUERY:

        formData = {
            "fname": $('#fname').val(),
            "middle": $('#middle').val(),
            "lname": $('#lname').val(),
            "sex": gender,
            "email": $('#email').val(),
            "address1": $('#address1').val(),
            "city": $('#city').val(),
            "state": $('#state').val(),
            "zip": $('#zip').val(),
            "phone": $('#phone').val(),
            "altphone": $('#altphone').val(),
            "email": $('#email').val(), 
            "year": $('#year').val(),
            "month": $('#month').val(),
            "day": $('#day').val(),
            "pass": $('#pass').val(),
            "pin": $('#pin1').val() + $('#pin2').val() + $('#pin3').val() + $('#pin4').val(),
            "ssn": $('#ssn1').val() + $('#ssn2').val() + $('#ssn3').val(),
            "username": $('#username').val()
        }

        console.debug(formData);

        // AJAX POST to the same page
        $.ajax({
            type: "POST",
            url: 'index.php',
            data: formData,
            dataType: 'json',
            success: function (data, textStatus, jqXHR) {
                // Switch divs
                $('#submit').addClass('visible');
                $('#form').addClass('invisible');
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ': ' + errorThrown);
            }
        });

#submit中的PHP代码:

session_start();

// Variables
$fname = $_POST['fname'];
...

// Testing
var_dump($_POST);
echo "<br /><br />";
var_dump($_GET);
echo "<br /><br />";
var_dump($_REQUEST);

// cURL Stuff

$ _POST,$ _ GET和$ _REQUEST在使用dataType:'text'时均返回空数组,尽管我很确定一旦JSON修复后,$ _ POST将正确通过。

我一辈子都看不到JSON语法出了什么问题,但这可能与AJAX所应用的自动格式化有关。

希望这是一个可以轻易发现的小错误! 任何帮助追踪它的方法将不胜感激:)

我认为您的问题在于dataType的使用以及您实际输出的内容。 dataType选项用于告诉jQuery期望返回哪种数据类型。 就个人而言,我会保留它,因为jQuery可以很容易地猜测到这一点。

其次,您实际上并没有从PHP脚本输出任何JSON。 PHP中的数组不会自动转换为JSON。 您需要对其进行转换。 另外,您应该使用标题告诉浏览器期望什么。 在PHP中:

header("Content-Type: application/json");   //so jQuery knows what to expect
echo json_encode( $myArray );
exit;

json_encode()

附带说明, dataType是它使您可以更好地控制错误。 您可以检查字符串是否为有效的JSON,而不是调用JSON.parse (jQuery使用dataType设置为json为您执行的jQuery),如果不是,则向用户显示错误。

我找到了解决方案! 实际上,我没有回发到同一页面,而是回发到同一页面的刷新版本。 因此,$ _ POST中没有数据。 我通过将内容发布到单独的页面,在此处设置内容类型,然后从该页面获取结果来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM