如何在Ajax调用期间跳出PHP脚本并触发jQuery错误处理程序


How to break out of PHP script during Ajax call and fire jQuery error handler with error?

我希望能够打破我的PHP脚本是用jQuery Ajax调用。如何将错误返回给jQuery以显示给用户?

PHP:

if($gift_card != null)
{
echo "not null";            
}
else 
{
echo "null";    
exit();         
}
jQuery:

error: function(jqXHR, textStatus, errorThrown) {
                        status.html("There was an error processing the request. " + errorThrown);  
                        setTimeout(function() {                                
                            status.fadeOut(); 
                        }, 4000);                            
                    },
                    success: function( data ) {
                        if (console && console.log){
                            console.log( 'Sample of data:', data);
                        }                            
                        status.html('Email Sent Successfully.');   
                        setTimeout(function() {
                            status.fadeOut(); 
                        }, 4000); 

如果我回显null并退出,它仍然作为成功返回。我是否只需要检查成功的数据,看看返回的是什么,然后从那里开始?

如果我没弄错的话,如果你的php头结果代码是200以外的任何东西,它将被jquery $视为错误。ajax .

ajax中的" Success "是指php运行成功。我通常是这样做的:

成功:功能(数据){如果(数据= ="零"){}否则if (data=="not null"){}其他的{}}

对不起,这不是代码格式。我在我的机器人上

我认为通过HTTP状态码发送ajax错误信号是不适当的行为。我更喜欢的方法是返回一个json结构,它嵌入了状态信息,而不管PHP端发生了什么。

$data = array(
   'error' => false,
   'message' => 'Everything A-OK',
   'error_code' => ...,
   'data' => actual response stuff here
);
echo json-encode($data);

$data = array(
   'error' => 'true',
   'message' => 'Database query failed',
   'error_code' => something relevant
);
echo json-encode($data);

这样,HTTP状态码将真正地告诉ajax客户端在HTTP级别发生了故障,并将ajax调用的结果留在更高级别进行处理。

人们会以两种方式争论,如果AJAX请求没有产生任何结果,那么AJAX调用获得404响应是合适的。但这就像告诉你的妻子杂货店不存在,因为当你开车去买牛奶的时候,他们没有牛奶了。嗯,没有。商店就在那儿,运作得很好。

一旦PHP进程被调用,那么你就不会在jquery中遇到错误处理程序(除非你没有返回预期的数据类型)。Json等).

所以你需要PHP脚本回显一个字符串并在你的成功处理程序中捕获它