这是我的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,但始终调用错误函数。
有谁知道,
答案 0 :(得分:2)
最有可能的问题是这一行:dataType: 'json',
因为它期待Json响应并且您正在发送html或文本文本响应。我们先来看看定义:
JSON.stringify 将Javascript对象转换为JSON文本,并将该JSON文本存储在字符串中。
contentType 是发送到服务器的标头,指定特定格式。
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决定数据类型。 (它在识别方面做得非常好)或确保在双方(客户端和服务器)上使用正确的dataType 解决方案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
:来发送JSON对象
contentType: "application/json; charset=utf-8",
然后使用php://input
阅读原始输入(注意:$ _POST
在这里工作)
以下是如何:
header('Content-Type: application/json; charset=UTF8');
$input = file_get_contents('php://input');
$decoded_input = urldecode($input);
$data = json_decode($input);