jQuery $.ajax(),将成功数据传递给单独的函数
Posted
技术标签:
【中文标题】jQuery $.ajax(),将成功数据传递给单独的函数【英文标题】:jQuery $.ajax(), pass success data into separate function 【发布时间】:2011-01-25 02:19:17 【问题描述】:我正在使用 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);
);
【问题讨论】:
你确定你获得了“成功”吗? 是的,我正在通过“成功”获取一些数据。 【参考方案1】:对我来说很好用:
<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>
【讨论】:
不知道我错过了什么,但按照你的例子,它工作得很好。谢谢!【参考方案2】:您可以使用 this 关键字访问自定义数据,传递给 $.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);
【讨论】:
这是一个不错的、干净的方法,它不涉及创建新函数。谢谢!【参考方案3】:我就是这样做的
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);
【讨论】:
我敢肯定,对于一个简单的用例,您不会像那样单独声明对象属性,为什么不使用对象文字呢?"pdata":"submit":"somevalue","func":alert_func
请问这对JS中的GC有什么影响(如果有的话)?【参考方案4】:
在第一个代码块中,您永远不会使用str
参数。您的意思是说以下内容吗?
testFunc = function(str, callback)
$.ajax(
type: 'POST',
url: 'http://www.myurl.com',
data: str,
success: callback
);
【讨论】:
【参考方案5】:我相信你的问题是你传递 testFunct 一个字符串,而不是一个函数对象,(这甚至可能吗?)
【讨论】:
【参考方案6】:虽然我不能 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 += '<option value="' + jdata[i].Description + '">' + jdata[i].Description + ' (' + jdata[i].ProcedureCode + ')' + '</option>';
;
$("select#cptIcdProcedureSelect").html(options);
;
【讨论】:
以上是关于jQuery $.ajax(),将成功数据传递给单独的函数的主要内容,如果未能解决你的问题,请参考以下文章