【问题标题】:Questions about handling data and error in $.ajax response关于处理 $.ajax 响应中的数据和错误的问题
【发布时间】:2010-06-29 07:16:04
【问题描述】:

我正在使用 jquery 和 php 进行一些异步工作。 我将$.ajaxbeforesendcompletesuccesserror 一起使用。 我向执行一些mysql查询的php发出异步POST请求,如果一切正常,则返回true(实际上是字符串“1”)和false(字符串“0”)。 回到 js,我在成功函数中处理了数据返回(或完成?)。 我是否必须处理数据

if (data=="1")
  alert("ok")
else
  alert("ko")?

这是正确的方法吗?

另外一个问题,$.ajax 的错误函数是针对ajax 请求本身而不是针对操作的结果? 谢谢


也许我没有很好地解释自己。 ph 脚本只执行少量查询,但有可能由于任何原因查询不会运行,所以我测试查询的执行并立即返回“0”或在所有查询正确执行后返回“1”。在 javascirpt 中,如果我有“0”,我必须显示带有警报的错误,如果“1”是成功消息。

那么在js中我只需要测试返回的数据并在$.ajax的成功函数中显示alert?

【问题讨论】:

  • 没有理由将其标记为 PHP。

标签: jquery


【解决方案1】:

对于这种情况,我喜欢使用我以 JSON 形式返回的对象,所以它更灵活一点:

$resultObj = new stdClass ();
$resultObj->success = true;
$resultObj->msg = '';

//your code here
//in case of SQL error
$resultObj->success = false;
$resultObj->msg = 'There was an error while processing your requests';

//return the response
$echo json_encode($resultObj);

然后在您的 jQuery 请求中,您可以将 dataType 属性设置为 json,以便在 HTTP 成功的情况下将响应转换为对象,以便您可以在成功函数中处理错误:

$.ajax({
 url      : 'yourpage.php',
 success  : function(data, status, xhr) {
   if (data.success === true) {
      alert('Everything ok');
   } else {
      alert('An error occurred: ' + data.msg);
   }
 },
 error  : function(xhr, status, ex) {
   alert('An error occurred during the communication with the server: ' + xhr.status +' - ' + xhr.statusText);
 },
 dataType : 'json'
});

正如其他人所说,您可以让您的 PHP 脚本返回 HTTP 404 错误,以便将您的错误重定向到 javascript 错误处理程序,但我喜欢保留该错误处理程序以处理未处理的错误,例如未捕获的异常或 HTTP 失败,对于我在服务器端处理的错误,我也在成功函数内的客户端处理它们。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    作为$.ajax()函数的error参数传递的函数只有在请求失败时才会运行; IE。如果它返回类似404 Not Found500 Internal Server Error 的错误代码。

    就JavaScript而言,无论它是否包含“false”、“error”或任何其他字符串,请求都会成功。您需要在作为 success 参数传递的函数中验证这一点,就像上面演示的那样。

    如果 PHP 脚本返回 false,您可能需要考虑返回 HTTP 错误代码(如 403 Forbiddenany other status code that makes more sense to your script)而不是 0

    【讨论】:

      【解决方案3】:

      这行得通!如果你想调用你的错误函数,你需要设置你的服务器来响应一个错误代码,即:

      <?php header('HTTP/1.1 404 Not Found'); ?>
      

      【讨论】:

      • 这太可怕了; 500 内部服务器错误表明脚本崩溃了,但它没有。
      【解决方案4】:

      阅读:Model-View-Controller in jQuery

      最好的方法...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-24
        • 2016-01-20
        • 1970-01-01
        • 2013-01-25
        • 2020-06-02
        • 2021-06-08
        • 2017-05-14
        • 1970-01-01
        相关资源
        最近更新 更多