[英]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;
附带说明, dataType
是它使您可以更好地控制错误。 您可以检查字符串是否为有效的JSON,而不是调用JSON.parse
(jQuery使用dataType设置为json为您执行的jQuery),如果不是,则向用户显示错误。
我找到了解决方案! 实际上,我没有回发到同一页面,而是回发到同一页面的刷新版本。 因此,$ _ POST中没有数据。 我通过将内容发布到单独的页面,在此处设置内容类型,然后从该页面获取结果来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.