2012-04-02 9 views
0

Ich führe eine Ajax-Funktion, die 3 Sekunden dauert + so in dieser Zeit möchte ich den Text der ein Link (Code unten und 1 im Bild) zu ändern " Warten Sie mal...". Ich habe den folgenden JavaScript-Code ausprobiert, aber was passiert, ist, dass sich der Text nicht ändert und die Funktion normal ausgeführt wird. Bitte, wenn jemand auf meinen Fehler hinweisen könnte.Text von Anker-Tag ändert sich nicht mit Javascript

HTML:

<a id="emailGarageList" href="javascript:EmailGarageList(347)">Email Garage List...</a> 

Screenshot:

enter image description here

Javascript:

function EmailGarageList(fId) { 
    $('#emailGarageList').text('Please wait...'); 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/EmailGarageList", 
     data: "{'fId':" + fId + ",'userId':" + userId + "}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert("Garage List Emailed!"); 
     }, 
     error: function() { 
      alert("Error :("); 
     } 
    }); 
    $('#emailGarageList').text('Email Garage List...'); 
}; 

Antwort

3

Verschieben $('#emailGarageList').text('Email Garage List...'); innerhalb $ .ajax Rückruffunktion. $ .ajax ist ein Async-Aufruf und Ihr Text unten wird sofort aktualisiert, bevor Sie den Ajax-Anruf abschließen.

function EmailGarageList(fId) { 
    $('#emailGarageList').text('Please wait...'); 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/EmailGarageList", 
     data: "{'fId':" + fId + ",'userId':" + userId + "}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      alert("Garage List Emailed!"); 
      $('#emailGarageList').text('Email Garage List...'); 
     }, 
     error: function() { 
      alert("Error :("); 
     } 
    });  
}; 
+0

Ich denke, das OP möchte die "Email Garage List ..." anzeigen, bis der Ajax-Anruf abgeschlossen ist. – jbabey

+0

Obwohl die Antwort von idrumgods auch korrekt war, markierte ich diese als akzeptiert, weil sie klarer erklärte, warum mein Problem auftrat (indem ich erwähnte, dass der Ajax-Aufruf asynchron war). – sprocket12

4

Setzen Sie die $('#emailGarageList').text('Email Garage List...'); in Ihre Erfolgsfunktion. Sonst ändert es sich und wechselt dann wieder zurück.

+0

Ich denke, die OP will die 'anzuzeigen‚E-Mail Garage Liste ...‘', bis der Ajax-Aufruf abgeschlossen ist. – jbabey

0

Meine Vermutung ist, dass jQuery Mobile (die ich nehme an, Sie verwenden), wird das DOM sso Ihre Wähler Modifizieren $ nicht finden können (‚# emailGarageList‘), wie Sie denken es ist.

+0

Danke, dass Sie mich über JQuery Mobile informiert haben :) Ich benutzte normale jQuery. – sprocket12

+0

Ich nahm an, basierend auf Ihrem Screenshot, dass Sie jQuery Mobile eingeschlossen haben, weil es identisch mit einer jQuery Mobile-Anwendung aussieht. –

0

Ich glaube, Sie suchen die beforeSend callback:

$.ajax({ 
    // other stuff ... 
    beforeSend: function() { 
     $('#emailGarageList').text('Please wait...'); 
    } 
}); 
+0

Das ist gut zu wissen, danke! – sprocket12

Verwandte Themen