2017-01-27 2 views
0

J'ai un problème très étrange avec les appels AJAX imbriqués. Le success des premières publications sur toute la page et par conséquent le deuxième appel AJAX success ne se déclenche pas. Je suis très confus avec ça. Voici ce que je suis en train de faire: appel ajaxMethod() sur le bouton clic:Appel ajax imbriqué, publications sur la première réponse

Page1.aspx bouton 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'); 
} 

est en dessous de mon ASPX. code cs:

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

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

Un problème plus étrange est que cela fonctionne bien quand je le débogue via F1 1, tandis que sans le déboguer, jut exécute les méthodes côté serveur sans intercepter la réponse côté client.

S'il vous plaît pardonnez mon ignorance envers la langue, comme je suis un débutant à elle. Notez également, que j'ai essayé avec success ainsi que complete, pas de chance.

+0

Comment vous appelez la fonction 'ajaxMethod()'? Si vous le faites lors de la soumission de l'élément 'form', il semble que vous deviez utiliser' preventDefault() '. –

+0

@Rory McCrossan: J'appelle le bouton ajaxMethod() sur le bouton – TechHunger

+0

Quel type de bouton? Pourriez-vous ajouter ce HTML à la question s'il vous plaît –

Répondre

1

Ajouter un return false dans votre bouton asp pour désactiver le postback ASP.NET:

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