Jquery Ajax错误:即使在请求状态为200时调用函数
以下是我的Ajax调用代码:Jquery Ajax错误:即使在请求状态为200时调用函数,jquery,ajax,Jquery,Ajax,以下是我的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:ema
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,但始终调用错误函数
有人知道吗
- 为什么呢
- 我怎样才能修好它
数据类型:“json”,因为它需要json响应,而您正在发送html或文本响应。让我们来看看<强>定义<强>第一:
- JSON.stringify将Javascript对象转换为JSON文本,并将该JSON文本存储在字符串中
- contentType是发送到服务器的标头,指定特定格式
- dataType是告诉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');
}
});
$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data
echo $json_data->name;
如果您正在发布类似以下内容:{“name”:“John Doe”}
并期待回复:{“success”:true}
那么你应该:
var data = {"name":"John Doe"};
dataType : "json",
contentType: "application/json; charset=utf-8",
data : JSON.stringify(data),
有关详细信息:
解决方案1:(已测试)
- 只需删除
数据类型:'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');
}
});
$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
(注意:$\u POST
在这里不起作用)
方法如下:
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');
}
});
$json_data = json_decode(urldecode($_POST['json']));
//now $json_data variable has decoded JSON data
echo $json_data->name;
- 在PHP文件
头中设置内容类型('Content-Type:application/json;charset=UTF8')代码>
- 获取数据
$input=file\u获取内容('php://input');代码>
- 解码数据
$decoded\u输入=urldecode($input)代码>
- 最后,将其解码为JSON对象
$data=JSON\u decode($input)代码>
如果请求有效,但反序列化失败,则可能发生这种情况。如果您实际使用控制台和传递给error
处理程序函数的参数对此进行调试,您可以得到要诊断的错误消息。您能显示您得到的响应吗?似乎您没有设置json格式的响应。在Ajax的数据中不需要使用JSON.stringify
call@PankajMakwana“您不需要在Ajax调用的数据中使用JSON.stringify
”@Phil发现得很好,但如果这是OP的生产代码,则由于语法原因,不会发出请求error@Alena您可以这样做{name:name,email:email,password:password}
在php端,您可以使用$\u POST['email']
a)您不需要在jQuery中使用encodeURIComponent
,它可以为您这样做,因此您只需对数据进行双重编码。b)您不必在$\u POST
或$\u GET
属性上使用urldecode
。请求中的任何数据都已被删除decoded@Phil也许你是对的,但是数据是像json字符串一样在服务器上运行。因此,我添加了encodeURIComponent
进行编码,而在服务器端,数据没有解码,所以我使用了urldecode
顺便说一句,我不确定OP是否需要编码。@Atlas\u Gondal这就是我要找的。非常感谢:)