Javascript 如何为Ajax调用创建和处理响应
如何在我的PHP脚本中正确处理成功/错误结果? 我在脚本中有一个函数,它要么失败,要么成功。通常,我会返回true或false 但如果我理解正确,Ajax成功函数并不关心脚本中的结果,它只关心它是否实际运行了我的脚本。 换句话说,令人困惑的是,我必须检查success函数中的错误 那么,我应该如何处理PHP返回错误,以及如何在success函数中检查它?我应该让PHP简单地“echo”true“;“如果它成功了?”Javascript 如何为Ajax调用创建和处理响应,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,如何在我的PHP脚本中正确处理成功/错误结果? 我在脚本中有一个函数,它要么失败,要么成功。通常,我会返回true或false 但如果我理解正确,Ajax成功函数并不关心脚本中的结果,它只关心它是否实际运行了我的脚本。 换句话说,令人困惑的是,我必须检查success函数中的错误 那么,我应该如何处理PHP返回错误,以及如何在success函数中检查它?我应该让PHP简单地“echo”true“;“如果它成功了?” $.ajax({ type: 'POST',
$.ajax({
type: 'POST',
url: 'jquery-actions.php',
data: formData,
dataType: 'text',
encode: true,
error: function (response) {
console.log(response);
},
success: function (response) {
//How to find out whether or not PHP function worked?
}
您是正确的,
$.ajax
调用的错误处理程序只在请求的响应代码不是200ok
时执行。如果代码执行正确,但有一个错误需要客户端处理,则可以返回一个指示响应状态的标志。假设您使用JSON,它可能如下所示:
{
success: true,
additionalData: 'foo bar'
}
然后,您可以在success
处理程序中检查该标志:
$.ajax({
type: 'POST',
url: 'jquery-actions.php',
data: formData,
dataType: 'text',
encode: true,
error: function (response) {
console.log(response);
},
success: function (response) {
if (response.success) {
console.log('it worked!');
} else {
console.log('there was a problem...');
console.log(response.additionalData);
}
}
或者,您可以强制PHP返回500错误:
header("HTTP/1.1 500 Internal Server Error");
但是,您将无法使用此方法发送其他数据,这意味着错误消息必须保存在客户端代码中。试试看
$.ajax({
type: 'POST',
url: 'jquery-actions.php',
data: formData,
dataType: 'text',
encode: true
})
.always(function(jqxhr, textStatus, errorThrown) {
// `success`
if (typeof jqxhr === "string"
&& textStatus !== "error"
&& jqxhr == "true") {
console.log(jqxhr)
}
// `error`
else if (jqxhr == "false"
|| typeof jqxhr === "object"
|| textStatus === "error") {
console.log(jqxhr, errorThrown)
}
})
如果返回HTTP
status code200
,则将触发success
。否则,它将触发error
函数。如果您希望在PHP中发生错误时调用ajax error函数,则可以让它以类似500(服务器错误)的错误代码进行响应。除此之外,您是对的,您必须在关于PHPs的成功功能签出页面中检查错误http\u response\u code()
function非常感谢!现在,我让我的PHP函数执行以下操作:echo json_encode(array('success'=>true));console.log显示:{“success”:true}但是如果(response.success)没有验证为true…您需要删除数据类型
属性,或者将其更改为'json'
,实际上我自己刚刚发现了这一点。现在工作得很好!谢谢!