如何创建和处理Ajax调用的响应

时间:2015-03-27 14:16:47

标签: javascript php jquery ajax

在PHP脚本中如何正确处理成功/错误的方法? 我在脚本中有一个函数,它失败或成功。通常情况下,我会返回真或假。

但是如果我理解正确,Ajax成功函数并不关心我的脚本中的结果,它只关心它是否实际运行我的脚本。 换句话说,我不得不混淆地检查成功函数中的错误。

那么我应该如何处理PHP返回错误,如何在成功函数中检查它?我应该把PHP简单地“回声”为真“;”如果成功了?

    $.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?
        }

2 个答案:

答案 0 :(得分:1)

您的正确之处在于error调用的$.ajax处理程序仅在请求的响应代码不是200 OK时执行。如果代码执行正确,但是您希望客户端处理错误,则可以返回指示响应状态的标志。假设您使用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");

但是,您无法使用此方法发送其他数据,这意味着必须在客户端代码中保留错误消息。

答案 1 :(得分:1)

尝试

$.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)
  }
})