2017-01-27 25 views
0

ネストされたAJAX呼び出しで非常に奇妙な問題が発生しています。最初のポストバックのsuccessは全体のページを返し、結果として2番目のAJAXコールはsuccessになりません。私はこれと非常に混同されることがあります。以下は、私がやろうとしているものです:ボタンクリックでajaxMethod()を呼び出す :ネストされたajax呼び出し、最初の応答のポストバック

Page1.aspxのASPボタン:

<asp:Button ID="btnGet" runat="server" Text="Get" OnClientClick="ajaxMethod();" /> 

ではJavaScript:以下

function ajaxMethod() {   
    var txtvalue = "123"; 

    $.ajax({ 
     type: "POST", 
     url: "Page1.aspx/Method1", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: "{data:'" + txtvalue + "'}" 
    }).done(function (response) { 
     ajaxMethod2(response); 
    }); 
} 

function ajaxMethod2(response) { 
    if (response.d == "success") { 
     var ddlVacancyID = 12; 

     $.ajax({ 
      type: "POST", 
      url: "Page1.aspx/Method2", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      data: "{vacancyId:'" + ddlVacancyID + "'}"   
     }).done(function (response) { 
      console.log('res2'); 
      ajaxMethod3(response); 
     }); 
    } else { 
     $("#<%=lblMsg.ClientID%>").text(response.d) 
    } 
} 

function ajaxMethod3(response) { 
    console.log('response received'); 
} 

私のASPXです。 csコード:

[WebMethod] 
public static string Method1(string data) 
{ 
    return "success"; 
} 

[WebMethod] 
public static string Method2(int vacancyId) 
{ 
    return "success"; 
} 

さらに奇妙な問題は、F1でデバッグするとうまくいくということです1、デバッグなしでは、クライアント側で応答をキャッチせずにサーバー側のメソッドを実行します。

私はそれを初心者であるので、言語に対する私の無知を許してください。 また、私はsuccesscompleteと一緒に試してみましたが、運はありません。

+0

どのように 'ajaxMethod()'関数を呼び出していますか? 'form'要素の提出時にそれを実行しているなら、' preventDefault() 'を使う必要があるように思えます。 –

+0

@Rory McCrossan:ボタンをクリックするとajaxMethod()が呼び出されます – TechHunger

+0

どのようなボタンですか?そのHTMLを質問に追加してください。 –

答えて

1

ASP.NETポストバックを無効にするには、あなたのASPボタンでreturn falseを追加します。

<asp:Button ID="btnGet" runat="server" Text="Get" 
      OnClientClick="ajaxMethod();return false;" /> 
関連する問題