Cela peut sembler très facile à quelques-uns de vous, mais je ne peux pas comprendre pourquoi je ne peux pas obtenir la valeur de retour, même après avoir sélectionné de nombreux messages 🙁
function getMessageCount() { var count; $.ajax({ type: "POST", url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount", dataType: "json", contentType: "application/json; charset=utf-8", success: function (data) { count = data.d; } //success }); return count; }
Maintenant, si j'appelle var count = getMessageCount()
; Il me donne undefined 🙁 alors que le nombre de méthodes est correct, c'est-à-dire que le service fonctionne bien.
C'est parce que l' $.ajax()
est asynchrone.
Si vous modifiez votre code sur quelque chose comme:
function getMessageCount(callback) { var count; $.ajax({ type: "POST", url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount", dataType: "json", contentType: "application/json; charset=utf-8", success: function (data) { count = data.d; if(typeof callback === "function") callback(count); } //success }); }
Ensuite, lorsque vous l'appelez:
getMessageCount(function(count){ console.log(count); });
Je suis d'accord avec la première ligne par ahren que 'C'est parce que l'appel $ .ajax () est asynchrone.'
Vous pouvez essayer d'ajouter un paramètre – async: false qui est vrai par défaut. Cela rend l'appel synchrone.
Vous pouvez modifier votre code comme suit:
function getMessageCount() { var count; $.ajax({ type: "POST", url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount", dataType: "json", async:false, contentType: "application/json; charset=utf-8", success: function (data) { count = data.d; } //success }); return count; }
Utiliser un rappel:
Fonction d'appel comme:
getMessageCount(function(result) { //result is what you put in the callback. Count in your case });
Et l'autre comme:
function getMessageCount(callback) { var count; $.ajax({ type: "POST", url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount", dataType: "json", contentType: "application/json; charset=utf-8", success: function (data) { count = data.d; if (callback) { callback(count); } } //success }); }
Pourquoi ne pas simplement passer à une fonction?
function getMessageCount() { var count; $.ajax({ type: "POST", url: "http://localhost:43390" + "/services/DiscussionWidgetService.asmx/GetMessageCount", dataType: "json", contentType: "application/json; charset=utf-8", success: function (data) { count = data.d; countMessages(count); } //success }); } function countMessages(counted) {var counted = counted; console.log(counted);}
function ajax_call(url,data){ return $.ajax({ type: "POST", url: url, data: data, async:false, success: function(status){ } }).responseText; }
Maintenant, vous recevrez le texte de réponse du côté du serveur via un appel ajax