即使没有成功,Ajax成功函数也能正常工作

时间:2015-08-29 07:20:33

标签: php jquery mysql ajax

$something=100;
$.ajax({
          type: "post",
          url: "some.php",
          data: somevariable,
          dataType: "text",                  
          success: function(data) {         
            $something=$something-10; 
            alert($something);
          }.bind(this)
      });

以上ajax用于从some.php文件中获取数据,该文件用于从mysql数据库中获取数据。当成功或从数据库中检索数据时,该文件会发出警告,但即使我停止mysql服务器,然后再次调用ajax,它也会以$ something的值递减来警告消息

那么我怎么能让它工作就好像没有从数据库或空行返回的行那么只有在从数据库返回一些实际数据时才应该成功?

3 个答案:

答案 0 :(得分:3)

您可以这样做: -

success: function (data) {
    // Checking data is not null or undefined and valid data is returned
    if (data && data.length > 0) {
        $something = $something - 10;
        alert($something);
    }
}

假设data是从服务器返回的数据数组。

另外,为安全起见,请使用延迟jqXHR.fail()

$.ajax("some_unknown_page.html")
.fail(function (jqXHR, exception) {
    var msg = '';
    if (jqXHR.status === 0) {
        msg = 'Not connect.\n Verify Network.';
    } else if (jqXHR.status == 404) {
        msg = 'Requested page not found. [404]';
    } else if (jqXHR.status == 500) {
        msg = 'Internal Server Error [500].';
    } else if (exception === 'parsererror') {
        msg = 'Requested JSON parse failed.';
    } else if (exception === 'timeout') {
        msg = 'Time out error.';
    } else if (exception === 'abort') {
        msg = 'Ajax request aborted.';
    } else {
        msg = 'Uncaught Error.\n' + jqXHR.responseText;
    }
    $('#post').html(msg);
});

这将帮助您找出从服务器返回数据时发生的特定错误,之后您可以采取适当的措施。

或者,作为一个简单的例子: -

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });

// Perform other work here ...

// Set another completion function for the request above
jqxhr.always(function() {
  alert( "second complete" );
});

答案 1 :(得分:1)

如下:

function fail() {
    alert("Fail!");
}
$something=100;
$.ajax({
      type: "post",
      url: "some.php",
      data: somevariable,
      dataType: "text",                  
      success: function(data) {
        if(!data) return fail();         
        $something=$something-10; 
        alert($something);
      }.bind(this)
  }).fail(fail);

您可能需要更详细地检查data,具体取决于格式化方式。

但是,如果没有数据可以让服务器不返回200(或其他非错误代码),那可能会更好。

答案 2 :(得分:1)

Ajax的成功意味着ajax调用是成功的。换句话说,它是成功的,因为ajax调用到达服务器并且服务器提供了响应。 使用'数据'字段(服务器的reaponse)将信息返回给客户端,以便客户端了解发生的情况。一切顺利:代码,布尔等等。