在现有AJAX调用的错误情况下进行另一个Jquery AJAX调用

时间:2012-03-21 12:16:51

标签: javascript ajax jquery

我有以下代码,可以在成功和错误的情况下正常工作。但我想做的是在出错的情况下再做一次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;
});

4 个答案:

答案 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 );
});