2015-08-29 119 views
1
$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然后它也警告消息价值减少的东西即使没有成功,Ajax成功功能仍然有效

那么我该如何做到这一点如果没有从数据库返回的行或空行,那么应该没有成功,只有当数据库返回一些实际数据时才会成功。

+2

如果你想,你可以添加错误函数为 –

+2

如果你的PHP脚本返回200它将永远是一个成功的Ajax调用,你应该返回一些不同于一些.php文件或检查结果 –

+0

关闭数据库通常不会关闭Web服务器。 – sje397

回答

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"); 
}); 
+0

引述文档“的jqXHR.success(),jqXHR.error(),和jqXHR.complete()回调弃用的jQuery 1.8。为他们的最终准备拆除你的代码,使用jqXHR.done() jqXHR.fail()和jqXHR.always()来代替。“ – sje397

+1

Umda Pradarshan。 Kya Khoob Likha @palasH Ne。 UMDA。 –

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(或其他非错误代码),如果没有数据。

1

阿贾克斯成功,意味着Ajax调用是成功的。换句话说,这是成功的,因为ajax调用到达了服务器并且服务器提供了响应。 使用“data”字段(服务器的reaponse)将信息返回给客户端,以便客户端了解发生了什么。任何事情:代码,布尔等。