我有以下代码,可以在成功和错误的情况下正常工作。但我想做的是在出错的情况下再做一次ajax调用。到其他一些网址。这样做的正确方法是什么。我尝试再次调用ajax函数但导致javascript错误
这是工作代码的样本。
$('#save-walkin').die('vclick').live('vclick', function(e) {
e.preventDefault();
$.mobile.showPageLoadingMsg();
$.ajax({
url: 'http://www.someurl.com',
method: 'POST',
data: $('#form-createwalkin').serialize(),
success: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
},
error: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
}
});
return false;
});
我想做的事情就像这样。但它不起作用
$('#save-walkin').die('vclick').live('vclick', function(e) {
e.preventDefault();
$.mobile.showPageLoadingMsg();
$.ajax({
url: 'http://www.someurl.com',
method: 'POST',
data: $('#form-createwalkin').serialize(),
success: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
},
error: function(){
$.ajax({
url: 'http://www.someotherurl.com',
method: 'POST',
data: $('#form-createwalkin').serialize(),
success: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
},
error: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
}
}
});
return false;
});
答案 0 :(得分:1)
它没有正确形成。它应该是这样的:
$('#save-walkin').die('vclick').live('vclick', function(e) {
e.preventDefault();
$.mobile.showPageLoadingMsg();
$.ajax({
url: 'http://www.someurl.com',
method: 'POST',
data: $('#form-createwalkin').serialize(),
success: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
},
error: function(){
$.ajax({
url: 'http://www.someotherurl.com',
method: 'POST',
data: $('#form-createwalkin').serialize(),
success: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
},
error: function(){
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
}
});
}
});
return false;
});
答案 1 :(得分:1)
使用Deferred对象,那些是操作异步调用的对象,你可以解决:
$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
.then(myFunc, myFailure);
这样,myFunc在进行2次ajax调用后执行,而myFailure如果其中任何一次调用都有错误。
您可以在jquery官方文档中了解更多相关信息:JQuery Deferred Object
答案 2 :(得分:0)
像这样,将Ajax存储在对象中会给你更多的灵活性,而在错误(失败)函数中,只需使用不同的URL再次调用该函数。
可能需要一些调整,如果它只是假设重复一次,则需要一个计数器!
runAjax('http://www.someurl.com');
funcion runAjax(url) {
var jqXHR = $.ajax({
url: url,
method: 'POST',
data: $('#form-createwalkin').serialize()
});
}
jqXHR.done(function() {
$.mobile.hidePageLoadingMsg ();
document.location.href = "queue.php";
}.fail(function() {
runAjax('http://www.someotherurl.com');
});
答案 3 :(得分:0)
我认为首先你必须检查你的回调,或者你得到的错误......
可能会帮助你..
$.ajax({
statusCode: {
404: function() {
alert('page not found');
}
}
});
您也可以尝试提供
var menuId = $("ul.nav").first().attr("id");
var request = $.ajax({
url: "script.php",
type: "POST",
data: {id : menuId},
dataType: "html"
});
request.done(function(msg) {
$("#log").html( msg );
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});