JQuery $ .ajax (), transfère les données de réussite dans une fonction distincte

J'utilise la fonction jjuery $ .ajax (). Je l'ai mis dans une fonction parent, qui passe certaines valeurs dans la fonction ajax. Ce que j'aimerais faire, c'est une fonction de rappel définie par l'utilisateur, qui obtient le paramètre de données transmis par la fonction de réussite d'ajax.

Voici ce que je pensais que cela fonctionnerait, mais ce n'est pas le cas:

testFunc = function(str, callback) { // Send our params var data = 'some data to send'; $.ajax({ type: 'POST', url: 'http://www.myurl.com', data: data, success: callback }); } 

Ensuite, je souhaite pouvoir appeler cette fonction et passer ma fonction personnalisée afin que je puisse utiliser les données des fonctions de succès à l'intérieur de cette fonction:

 testFunc('my string data', function(data){ alert(data); }); 

Je souhaite que ce soit le même que:

 testFunc = function(str, callback) { // Send our params var data = 'some data to send'; $.ajax({ type: 'POST', url: 'http://www.myurl.com', data: data, success: function(data) { alert(data); } }); } 

Fonctionne bien pour moi:

 <script src="/jquery.js"></script> <script> var callback = function(data, textStatus, xhr) { alert(data + "\t" + textStatus); } var test = function(str, cb) { var data = 'Input values'; $.ajax({ type: 'post', url: 'http://www.mydomain.com/ajaxscript', data: data, success: cb }); } test('Hello, world', callback); </script> 

Vous pouvez utiliser ce mot clé pour accéder aux données personnalisées, transmises à la fonction .ajax () :

  $.ajax({ // ... // --> put ajax configuration parameters here yourCustomData: {param1: 'any value', time: '1h24'}, // put your custom key/value pair here success: successHandler }); function successHandler(data, textStatus, jqXHR) { alert(this.yourCustomData.param1); // shows "any value" console.log(this.yourCustomData.time); } 

Dans le premier bloc de code, vous n'utilisez jamais le paramètre str . Voulez-vous dire ce qui suit?

 testFunc = function(str, callback) { $.ajax({ type: 'POST', url: 'http://www.myurl.com', data: str, success: callback }); } 

C'est comme ça que je le fais

 function run_ajax(obj) { $.ajax({ type:"POST", url: prefix, data: obj.pdata, dataType: 'json', error: function(data) { //do error stuff }, success: function(data) { if(obj.func){ obj.func(data); } } }); } alert_func(data){ //do what you want with data } var obj= {}; obj.pdata = {sumbit:"somevalue"}; // post variable data obj.func = alert_func; run_ajax(obj); 

Je crois que votre problème est que vous passez testFunct une chaîne, et non un objet fonction, (est-ce même possible?)

Bien que je ne sois pas sûr de ce que vous voulez (probablement mon cerveau est lent aujourd'hui), voici un exemple d'utilisation similaire à ce que vous décrivez:

 function GetProcedureById(procedureId) { var includeMaster = true; pString = '{"procedureId":"' + procedureId.toString() + '","includeMaster":"' + includeMaster.toString() + '"}'; $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", data: pString, datatype: "json", dataFilter: function(data) { var msg; if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') msg = JSON.parse(data); else msg = eval('(' + data + ')'); if (msg.hasOwnProperty('d')) return msg.d; else return msg; }, url: "webservice/ProcedureCodesService.asmx/GetProcedureById", success: function(msg) { LoadProcedure(msg); }, failure: function(msg) { // $("#sometextplace").text("Procedure did not load"); } }); }; /* build the Procedure option list */ function LoadProcedure(jdata) { if (jdata.length < 10) { $("select#cptIcdProcedureSelect").attr('size', jdata.length); } else { $("select#cptIcdProcedureSelect").attr('size', '10'); }; var options = ''; for (var i = 0; i < jdata.length; i++) { options += '<option value="' + jdata[i].Description + '">' + jdata[i].Description + ' (' + jdata[i].ProcedureCode + ')' + '</option>'; }; $("select#cptIcdProcedureSelect").html(options); }; 

Très bon code: vous pouvez utiliser :: this :: keyword pour accéder aux données personnalisées, passé à la fonction $ .ajax ():

 $.ajax({ // ... // --> put ajax configuration parameters here yourCustomData: {param1: 'any value'}, // put your custom key/value pair here success: successHandler }); function successHandler(data, textStatus, jqXHR) { alert(this.yourCustomData.param1); // shows "any value" };