2012-10-21 92 views
3

我正在jQuery中调用一个PHP脚本的ajax调用。但是,PHP脚本需要返回ajax中的成功/错误处理程序才能触发。因此,这里的AJAX:
PHP Ajax成功

$.ajax({ 
     data: $this.serialize(), 
     type: "POST", 
     url: "/Scripts/script.php", 
     success: function() { 
      alert("script was successful"); 
     }, 
     error: function() { 
      alert("script was unsuccessful"); 
     } 
    }); 

因此,有几件事情的PHP脚本可以返回如:

return 0, 1 
return true, false 
return "true", "false" 
echo "true", "false 

哪一个触发了ajax成功/错误电话?

+0

要使其失败,请使用[header()](http://php.net/manual/en/function.header.php)发送错误标题。 –

回答

11

只要服务器端脚本发送HTTP状态码200,它总是会触发success回调。答案根本不重要。只有状态码。在你显示的所有示例中,你都发送了HTTP状态码200 =>成功回调将始终触发。

使用http_response_code函数,您可以强制状态码为不同于200的状态码。

正如你可以有你的PHP脚本返回一些信息,然后成功函数内部测试,是由脚本返回的值来了解一些服务器端处理是否已出现故障的一种替代方案:

$.ajax({ 
    data: $this.serialize(), 
    type: "POST", 
    url: "/Scripts/script.php", 
    success: function(result) { 
     if (result == 'true') { 
      alert("script was successful"); 
     } else { 
      alert("script was unsuccessful"); 
     } 
    }, 
    error: function() { 
     alert("something very bad went wrong => there's a bug in the script"); 
    } 
}); 

现在您的脚本可以回显truefalse

如果要发送复杂对象,可以使用json_encode函数将它们发送为JSON,并使用header函数将HTTP Content-Type标头设置为application/json

+0

那么脚本如何发送HTTP状态码200? –

+1

脚本中没有错误=> HTTP状态码200.您可以使用'http_response_code'函数强制HTTP状态码。 –

+0

因此无法使用上述四个选项之一来告诉ajax脚本不成功? –

0

成功在XMLHTTPRequest上完成且没有错误的请求上执行,无论您返回的结果如何。还有另一个complete回调,它会在您的AJAX脚本上执行完成,如果您有XMLHTTPRequest错误,则无关紧要。

+0

该脚本更新某人的密码,所以如果出现问题(如用户输入的当前密码不正确),那么我想显示'密码没有改变'或什么的。 ajax如何知道php脚本终止不成功 –

+0

返回false,并且thema在游览succeshandler中有一个if-else语句。 @CharlieYabben – 11684

+1

你应该在你的结果中传递一个变量,说你的后处理器(php脚本可能)没有成功地更新你的数据库。这应该检查'success'回调。如果你的后处理程序返回'true'成功,只要成功回调检查成功:'function(r){if(r =='true'){...} ...}' – Reflective