jQuery $ .ajax(),将成功数据传递给单独的函数

我正在使用jQuery $ .ajax()函数。 我把它放到一个父函数中,它将一些值传递给ajax函数。 我想做的是,有一个用户定义的回调函数,它获取从ajax成功函数传入的数据参数。

这是我的想法会起作用,但它不是:

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 }); } 

然后我希望能够调用该函数,并传入我的自定义函数,以便我可以使用该函数内部的成功函数数据:

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

我希望这与以下相同:

 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); } }); } 

适合我的工作:

   

您可以使用关键字访问自定义数据,传递给$ .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); } 

在第一个代码块中,您永远不会使用str参数。 你的意思是说下面的话吗?

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

这就是我的方式

 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); 

我相信你的问题是你传递testFunct一个字符串,而不是一个函数对象,(甚至可能吗?)

虽然我不是100%确定你想要什么(可能我的大脑今天很慢),但这里有一个与你描述的类似用途的例子:

 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 += ''; }; $("select#cptIcdProcedureSelect").html(options); };