我已将接受的答案复制到问题How do I return a proper success/error message for JQuery .ajax() using PHP?
我的PHP脚本返回以下json。标头是正确的:PHP脚本输出中的Content-type: application/json
和json_encode()
:
{"success":"success"}
但检查状态的jquery无效:
$.ajax({
type: "POST",
url: '/ajax/index',
data: $("#NewsletterSignup").serialize(),
success: function(data)
{
console.log(data);
if (data.success == 'success') {
console.log('successful');
} else if(data.errors){
console.log('error occurred');
}
}
});
所以我得到了console.log(data)
,它给出了{"success":"success"}
。但那时它并没有评估if...else if
条件。为什么呢?
jquery版本是1.12.3
答案 0 :(得分:1)
从php文件中你需要将其编码为
json_encode({"success":"success"});
应该期待dataType:'json'
答案 1 :(得分:1)
将dataType添加到您的ajax代码中,如下所示:
$.ajax({
type: "POST",
url: '/ajax/index',
data: $("#NewsletterSignup").serialize(),
dataType:'json,' // CHECK THIS....
success: function(data)
{
console.log(data);
if (data.success == 'success') {
console.log('successful');
} else if(data.errors){
console.log('error occurred');
}
}
});
答案 2 :(得分:0)
那是因为你的php服务器将响应作为纯文本而不是json。查看标题Content-Type: text/html
。您的服务器需要使用Content-type: application/json
作为json发送标头。
<?php
$data = /** whatever you're serializing in array **/;
header('Content-Type: application/json');
echo json_encode($data);
或者,如果响应在plain text
中,则可以在客户端(javascript)中解析对json的响应。这样做:
$.ajax({
type: "POST",
url: '/ajax/index',
data: $("#NewsletterSignup").serialize(),
success: function(data)
{
data = JSON.parse(data);
console.log(data);
if (data.success == 'success') {
console.log('successful');
} else if(data.errors){
console.log('error occurred');
}
}
});
此外,您可以使用dataType:'json'
选项在jquery ajax中获得json响应。