2012-01-24 15 views
0

私は2つの検証jQuery関数を持っています。最初の検証がパスされた場合、2番目の認証だけが呼び出されます。私の場合は、両者が同時に交渉しています。ここにコードですネストされたJqueryコールで提案が必要

$("#btnValidate").live('click', function (event) { 
    $.ajax({ 
     data: { 
      procCode: '001' 
     }, 
     url: "jsp/Process.jsp", 
     success: function (result) { 
      $("#tdValidYN").html(result); 
      if (document.getElementById('hidValidYN').value == 'N') { 
       alert("Validation Failed. Required Columns Missing"); 
       $('#btnSave').attr('disabled', true); 
      } else { 
       alert("Validation Passed"); 
       $('#btnSave').attr('disabled', false); 
      } 
     } 
    }); 
    $.ajax({ 
     data: { 
      procCode: '002' 
     }, 
     url: "jsp/Process.jsp", 
     success: function (result) { 
      $("#tdValidYN").html(result); 
      if (document.getElementById('hidValidYN').value == 'N') { 
       alert("Validation Failed. Invalid Parameters Used"); 
       $('#btnCreateTable').attr('disabled', true); 
      } else { 
       alert("Validation Passed"); 
       $('#btnCreateTable').attr('disabled', false); 
      } 
     } 
    }); 
}); 

最初の関数のif条件で2番目の関数を置こうとしましたが、スクリプトエラーが発生しました。

助けてください。このような

答えて

0

何かが動作することがあります。

$("#btnValidate").live('click', function(event) { 
    $.ajax({ 


     data: {procCode: '001'}, 
           url:"jsp/Process.jsp", 
           success:function(result){ 
           $("#tdValidYN").html(result); 
           if(document.getElementById('hidValidYN').value=='N'){ 
            alert("Validation Failed. Required Columns Missing"); 
            $('#btnSave').attr('disabled', true); 
           }else{ 
            alert("Validation Passed"); 
            $('#btnSave').attr('disabled', false); 

              $.ajax({ 
                data: {procCode: '002' }, 
                url:"jsp/Process.jsp", 
                success:function(result){ 

                 $("#tdValidYN").html(result); 
                 if(document.getElementById('hidValidYN').value=='N'){ 
                  alert("Validation Failed. Invalid Parameters Used"); 
                  $('#btnCreateTable').attr('disabled', true); 
                 }else{ 
                  alert("Validation Passed"); 
                  $('#btnCreateTable').attr('disabled', false); 
                 } 
                } 
              }); 
           } 

           } 
         }); 


} 

場合ザッツあなたがしようとしたものを、いただきました!エラーはあなたの取得しますか?

+0

私は前と同じようにしようとしたオブジェクトがnullであるようないくつかのスクリプトの例外を持っています。しかし、もう一度これを試してみてください。どうもありがとうございました。 –

+0

probsはありませんでした。私はちょうど1ページのチェックアウトのためのヒープを扱いました。opencartのためのajax modだから私はすぐにそれを認識しました... –

+0

それは確かに動作しますが、5コールをチェーンする必要があると想像して、コールバック内でコールバックを渡す好ましい方法は、遅延オブジェクトを使用することです、私の答えを参照してください。 –

0

success: function(){ }パラメータ内で2番目のjQueryを呼び出します。$.ajax呼び出しが正常に実行された後に実行されます。

0

あなたが書いたコードは、javascriptが順番に実行される単純な理由のために明らかに動作しません。最初のコールのsuccessコールバック内で2番目のコールを作成します。あるいは、2番目の呼び出しを名前付き関数の中に入れ、最初の関数のsuccess callbackの中から呼び出して、コードをより綺麗に見せることができます。

1

私が正しく理解していれば、最初のものが成功した場合にのみ、2番目のajax要求を出したいと思っています。コールバックスパゲッティを行う代わりに、Deferredオブジェクトを使用する方がよいでしょう。

http://api.jquery.com/category/deferred-object/

コードのようなもののようになります。この方法で

$("#btnValidate").live('click', function (event) { 
    var d = $.Deferred(); 
    $.ajax({ 
     data: { 
      procCode: '001' 
     }, 
     url: "jsp/Process.jsp", 
     success: function (result) { 
      $("#tdValidYN").html(result); 
      if (document.getElementById('hidValidYN').value == 'N') { 
       alert("Validation Failed. Required Columns Missing"); 
       $('#btnSave').attr('disabled', true); 
       d.reject(); 
      } else { 
       alert("Validation Passed"); 
       $('#btnSave').attr('disabled', false); 
       d.resolve(); 
      } 
     } 
    }); 

    d.done(function(){ 
     $.ajax({ 
      data: { 
       procCode: '002' 
      }, 
      url: "jsp/Process.jsp", 
      success: function (result) { 
       $("#tdValidYN").html(result); 
       if (document.getElementById('hidValidYN').value == 'N') { 
        alert("Validation Failed. Invalid Parameters Used"); 
        $('#btnCreateTable').attr('disabled', true); 
       } else { 
        alert("Validation Passed"); 
        $('#btnCreateTable').attr('disabled', false); 
       } 
      } 
     }); 
    }); 
}); 

最初の呼び出しが成功した場合、第二のAjaxリクエストが(コールバックがdone関数に渡さ)のみ(ということ、それを参照してください実行します実行d.resolve())。検証が間違っていると、d.reject()が呼び出され、コールバックは実行されません(厳密には、rejectにコールバックするとfailに渡されたコールバックが実行されますが、追加されなかったため何も実行されません)。

編集:実際には、$.ajax繰延オブジェクトを返しますので、我々のような何かを行うことができます:

var d = $.ajax({ ... }); 
d.done(function(result) { 
    // this runs when the ajax call succeeds, it's the success callback 
}); 

をしかし、それは長くリファクタリングが必要になります。

繰延オブジェクトへの参照:http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/

+0

私は何かにこの男を考える –

関連する問題