Javascript jQuery$.ajax(),将成功数据传递到单独的函数中
我正在使用jQuery$.ajax()函数。我已将其放入父函数中,该函数将一些值传递给ajax函数。我想做的是有一个用户定义的回调函数,它获取从ajax成功函数传入的数据参数 以下是我认为可行的方法,但事实并非如此:Javascript jQuery$.ajax(),将成功数据传递到单独的函数中,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,我正在使用jQuery$.ajax()函数。我已将其放入父函数中,该函数将一些值传递给ajax函数。我想做的是有一个用户定义的回调函数,它获取从ajax成功函数传入的数据参数 以下是我认为可行的方法,但事实并非如此: testFunc = function(str, callback) { // Send our params var data = 'some data to send'; $.ajax({ type: 'POST', ur
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);
}
});
}
对我来说很好:
<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>
var callback=函数(数据、文本状态、xhr)
{
警报(数据+“\t”+文本状态);
}
var测试=功能(str、cb){
变量数据='输入值';
$.ajax({
键入:“post”,
网址:'http://www.mydomain.com/ajaxscript',
数据:数据,
成功:cb
});
}
测试(“你好,世界”,回调);
我相信你的问题在于你在传递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 += '<option value="' + jdata[i].Description + '">' + jdata[i].Description + ' (' + jdata[i].ProcedureCode + ')' + '</option>';
};
$("select#cptIcdProcedureSelect").html(options);
};
函数getProcedureByd(procedureId)
{
var includeMaster=true;
pString='{“procedureId”:“+procedureId.toString()+”,“includeMaster”:“+includeMaster.toString()+”}”;
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
数据:pString,
数据类型:“json”,
数据过滤器:函数(数据)
{
var-msg;
if(typeof(JSON)!=‘未定义’&&
typeof(JSON.parse)==“函数”)
msg=JSON.parse(数据);
其他的
msg=eval(“(“+数据+”)”);
if(msg.hasOwnProperty('d'))
返回msg.d;
其他的
返回味精;
},
url:“webservice/ProcedureCodesService.asmx/getprocedurebyd”,
成功:功能(msg)
{
加载程序(msg);
},
故障:功能(msg)
{
//$(“#sometextplace”).text(“过程未加载”);
}
});
};
/*构建过程选项列表*/
函数加载过程(jdata)
{
如果(jdata.length<10)
{
$(“选择#cptIcdProcedureSelect”).attr('size',jdata.length);
}
其他的
{
$(“选择#cptIcdProcedureSelect”).attr('size','10');
};
var选项=“”;
对于(var i=0;istr
参数。你的意思是说:
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);
您可以使用此关键字访问自定义数据,并将其传递给$.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);
}
你确定你获得了“成功”吗?是的,我通过“成功”获得了一些数据。不确定我遗漏了什么,但按照你的例子,它工作得非常好。谢谢这是一种很好的、干净的方法,不需要创建新函数。非常感谢。我相信对于一个简单的用例,您不会单独声明对象属性,为什么不使用对象文本呢<代码>{“pdata”:{“submit”:“somevalue”},“func”:alert_func}我可以问一下这对JS中的GC有什么影响(如果有)?