jquery将现有(可重用)函数放入ajax请求中-不能使用async:false
我有一些ajax功能,例如jquery将现有(可重用)函数放入ajax请求中-不能使用async:false,jquery,function,Jquery,Function,我有一些ajax功能,例如 function MyFunctionA(PassingObj) { $.ajax({ url: '123.ashx',data: PassingObj, type: 'POST',contentType: 'application/json', success: function (data1) { return data1
function MyFunctionA(PassingObj) {
$.ajax({
url: '123.ashx',data: PassingObj, type: 'POST',contentType: 'application/json',
success: function (data1) {
return data1
}
}
});
function MyFunctionB(PassingObj) {
$.ajax({
url: '456.ashx',data: PassingObj,type: 'POST', contentType: 'application/json',
success: function (data2) {
return data2
}
}
});
var GetValuesXY(){
var x = MyFunctionA(PassingObj);
var y = MyFunctionB(PassingObj);
return x + y;
}
MyFunction和MyFunction是在整个页面上调用的通用函数,如果不可能,我不想实现回调,因为它们可以在不同的情况下使用。
我无法将Ajax函数设置为async:false-该选项在v1.8中已被弃用,我不允许使用它,并且它已导致问题()
因此,为了确认,我永远无法成功调用函数GetValuesXY(){},因为x始终是未定义的,因为它将在不等待结果的情况下继续,因为它是异步的
因此,,
目前,我知道如何处理上述问题的唯一方法是合并2,在这种情况下,这是不可接受的:
function MyFunctionA(PassingObj) {
$.ajax({
url: '123.ashx',data: PassingObj,type: 'POST',contentType: 'application/json',
success: function (data1) {
$.ajax({ //MyFunctionB is effectively copied in here
url: '456.ashx',data: PassingObj,type: 'POST',contentType: 'application/json',
success: function (data2) {
return data1 + data2
}
}
});
}
}
});
现在我不能单独使用这两个示例函数,这是一种非常低效的编程方式,因为我可能会有无限量的排列
每次我想使用这些函数的时候,我都要对它们进行剪切和粘贴
是否不可能至少将函数调用放在ajax请求中?调子
var myData1;
var myData2;
$.ajax({
call MyFunctionA(),
success: function (data1) {
myData1 = data1;
$.ajax({
call MyFunctionB(),
success: function (data2) {
myData2 = data2;
}
}
});
}
}
});
(*-出于演示目的,这些只是虚拟函数)为什么不在调用
myfunction
时添加要运行的回调函数,并使该函数在成功时运行。异步AJAX与同步AJAX非常不同,因为一个同步AJAX实际上会停止浏览器线程,这与异步所做的非常不同,并且不推荐使用。从我看到的情况来看,您希望一个带有AJAX的函数能够从多个位置调用,并且能够以多种方式使用。例如,我会将回调函数传递到myfunction
的参数中,有时只需要调用myfunction而不调用MyFunctionB,有时它们需要一起调用,有时还需要调用MyFunctionC。显然,我不能像前面提到的那样去同步Ajax,我正在寻找一种方法来帮助保持函数的独立性和可重用性。即使我可以临时设置一个回调函数,也没关系,例如var GetResults{x:myfuncto(),y:MyFunctionB(),return GetResults.x()+GetResults.y()}嗯,您可以将它们分配给全局对象并调用它们的readystate:但这将应用于页面上的所有AJAX请求,而不仅仅是您所针对的那些请求。如果没有来自特定XMLHTTPRequest对象的回调,就很难以您尝试的方式获得特定AJAX请求的特定结束时间对象,但同样,您需要将代码重新排序为所显示的顺序,并且使用回调会更容易。因此,使用GetResults{x:myfunction(),y:MyFunctionB(),return GetResults.x()+GetResults.y()}的思想是可能的?