【问题标题】:Return an error to Ajax from PHP从 PHP 向 Ajax 返回错误
【发布时间】:2016-04-13 08:41:26
【问题描述】:

我有一个简单的 Javascript 函数:

function checkParams()
{
  $.ajax(
  {
    url: 'login.php',
    type: "GET",
    contentType: false,
    cache: false,
    processData: false,
    async: true,
    data: 
    {
      user: $("#user").val(),
      pass: $("#pass").val()
    },
    success: function(data)
    {
      $("#mydiv").load("loader.php");
    },
    error: function()
    {
      $("#mydiv").load("index.php");
    }
  }); 
}

还有一个简单的 PHP 函数,它检查正确的 userpass 字符串,如果出现故障,我应该返回错误条件..

我发现了一些建议这样做的例子:

function foo()
{
  /* code ... */

  /*error condition */
  echo "error";
}

但老实说,它不起作用..

如何从 PHP 告诉 ajax,我希望 ro 返回一个“错误条件”?

【问题讨论】:

    标签: php ajax error-handling


    【解决方案1】:

    jQuery.ajax() 错误处理程序仅在 HTTP 状态结果指示错误时触发;即页面返回 4xx 或 5xx 状态码。

    您可以执行以下两个选项之一:

    1) 在回显“错误”之前,使用header('HTTP/1.0 400 Bad Request')(或任何其他相关的 HTTP 状态代码)设置状态代码。

    2) 不要使用错误状态,而是让您的成功和失败条件都发出一个数组,使用json_encode() 转换为 JSON,然后在您的 javascript 中对其进行解码,并根据您的成功情况将其处理为成功或失败函数。

    【讨论】:

    • 正是我所做的。我总是尝试返回带有指示“状态”的属性的 JSON 响应。
    【解决方案2】:

    在这段代码中更改为 RETURN SOMETHING

    success: function(data)
    {
      return true;
    },
    error: function()
    {
      return false;
    }
    

    基本上 $result = 你的 ajax 返回;

    if ($result)
        {
            header('Content-Type: application/json');
        }
    else
        {
            header('HTTP/1.1 500 Internal Server Yourserver');
            header('Content-Type: application/json; charset=UTF-8');
            die(json_encode(array('message' => 'ERROR', 'code' => 'whatever you want to call it')));
        }
    

    【讨论】:

    • 只是问,登录尝试失败返回错误 500 是否合适?
    • 对于登录失败只需返回 FALSE 并根据结果执行 PHP 代码。 500 是服务器端问题。不是登录失败。这意味着客户端无法访问服务器。
    • 我以前从未听说过任何名为“index.php”的 Content-Type。
    • 我问是因为 OP 期望在错误事件中处理失败的登录,并看到你的回答我想知道这是否是一种可接受的(肯定不常见的)做法。感谢您的回答。
    • @Magnus Eriksson ... 打错字 ... 感谢提及
    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多