gpt4 book ai didi

javascript - AJAX POST 到 PHP JSON 错误

转载 作者:行者123 更新时间:2023-11-30 09:57:38 25 4
gpt4 key购买 nike

首先,我知道 StackOverflow 上有很多非常相似的帖子。我都翻遍了,还是没能解决这个问题。

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

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

在使用 AJAX 发布它之前,我正在调试“formData”对象,它成功地捕获了我的信息,并且看起来是一个有效的对象。

当使用 dataType: 'text' 时,AJAX POST 本身是成功的。但是,我需要数据类型:'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。你需要转换它。此外,您应该使用 header 告诉浏览器期望什么。在 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),如果不是,则向用户显示错误。

关于javascript - AJAX POST 到 PHP JSON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com