2012-03-21 13 views
2

成功とエラーの場合に正常に動作する次のコードがあります。しかし、私がしたいのは、エラーの場合に別のアヤックスコールを行うことです。他のURLにそれを行う正しい方法は何ですか。私は再びajax関数を呼び出してみましたが、JavaScriptエラーが発生しました。既存のAJAXコールのエラーで別のJquery AJAXコールを作成する

これは作業コードのサンプルです。

$('#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

? –

+0

内部の '$ .ajax()'コールから閉じ括弧が欠落しているようです。 – Pointy

+0

このロジックは機能するはずです。関数内に2番目の呼び出しを入れて、その関数をエラー関数 – MakuraYami

答えて

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

ありがとうございました。それは今私にとってうまくいった –

0

何かを働いていない、オブジェクト内にアヤックスを格納することは、あなたに多くの柔軟性を与え、そしてエラー(失敗)関数の中で、ちょうど別のURLで再び関数を呼び出します。

おそらく調整が必要なのですが、1回だけ繰り返すとしたらカウンタが必要です。

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'); 
}); 
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); 
}); 
1

使用繰延オブジェクトを与えることを試みることができ、それらはあなたができる、非同期呼び出しを操作するためのオブジェクトであります解決:

$.when($.ajax("/page1.php"), $.ajax("/page2.php")) 
    .then(myFunc, myFailure); 

をどちらか一方にエラーがある場合にmyFuncは2つのAjaxのコールが行われた後に実行し、myFailureこの方法です。

あなたはjqueryの公式ドキュメントでそれについての詳細を読むことができます:あなたが取得しているものjavascriptのエラーJQuery Deferred Object