gpt4 book ai didi

jquery - Ajax 错误: function called even when request status is 200

转载 作者:行者123 更新时间:2023-12-01 03:32:53 25 4
gpt4 key购买 nike

这是我的 Ajax 调用代码:

var name = $('#name').val();
var email = $('#email').val();
var password = $('#password').val();
$.ajax({
type: 'POST',
url: 'ajax.php',
cache: false,
data: { json : JSON.stringify({
name:name,
email:email,
password:password
})},
dataType: 'json',

success: function(){
alert('request successful');
},

error: function(){
alert('error occured');
}

});

请求状态为200,但错误函数一直被调用。

有谁知道

  • 这是为什么?
  • 我该如何修复它?

最佳答案

最有可能的是,问题出在这一行: dataType: 'json', 因为它期待 Json 响应,而您正在发送 html 或文本文本响应。让我们先看一下定义:

  • JSON.stringify 将 Javascript 对象转换为 JSON 文本并将该 JSON 文本存储在字符串中。

  • contentType 是发送到服务器的 header ,指定特定格式。

  • dataType 告诉 jQuery 期望得到什么样的响应。

示例:

如果您发布类似以下内容:{"name":"John Doe"} 并期待返回:{"success":true}

那么你应该:

var data = {"name":"John Doe"};
dataType : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),

了解更多详情:Check jQuery Docs

解决方案 1:(已测试)

  • 只需删除 dataType: 'json', 行并让 jQuery 决定数据类型。 (它在识别方面做得非常好)或者确保在双方(客户端和服务器)上使用正确的数据类型

解决方案 2:(已测试)

jQuery:

var name = $('#name').val();
var email = $('#email').val();
var password = $('#password').val();
$.ajax({
type: 'POST',
url: 'ajax.php',
dataType : "html", //assuming you need html response like '<div>Success</div>'
//Common types: html, xml, json & text
cache: false,
data: { json : encodeURIComponent(JSON.stringify({
name:name,
email:email,
password:password
}))},


success: function(){
alert('request successful');
},

error: function(){
alert('error occured');
}

});

PHP:

$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data
echo $json_data->name;

解决方案 3:(未经测试)

通过设置 contentType: like 发送 JSON 对象

contentType: "application/json; charset=utf-8", 

然后使用 php://input 读取原始输入(注意:$_POST 在这里不起作用)

方法如下:

  • 在 PHP 文件中设置内容类型 header('Content-Type: application/json; charset=UTF8');
  • 获取数据$input = file_get_contents('php://input');
  • 解码数据$decoded_input = urldecode($input);
  • 最后将其解码为 JSON 对象 $data = json_decode($input);

关于jquery - Ajax 错误: function called even when request status is 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45027619/

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