Javascript 使用jQuery,如何存储调用$.ajax函数的结果以供重用?
谢谢你阅读这篇文章 我想这确实是一个javascript问题,我的标题可能不是我要做的事情的核心,但我想将ajax请求的结果存储在一个全局变量中。这将允许我在进行ajax调用之前测试var……并避免对相同数据重复ajax调用。我需要能够通过populateSelect函数将click事件中的变量名向下传递到ajaxCall函数中 似乎我可以将函数作为参数传递,但我一直无法实现这一点 我喜欢在我的问题中包括工作示例,但在这种情况下,对服务器的调用延迟是问题的一部分 谢谢Javascript 使用jQuery,如何存储调用$.ajax函数的结果以供重用?,javascript,jquery,ajax,Javascript,Jquery,Ajax,谢谢你阅读这篇文章 我想这确实是一个javascript问题,我的标题可能不是我要做的事情的核心,但我想将ajax请求的结果存储在一个全局变量中。这将允许我在进行ajax调用之前测试var……并避免对相同数据重复ajax调用。我需要能够通过populateSelect函数将click事件中的变量名向下传递到ajaxCall函数中 似乎我可以将函数作为参数传递,但我一直无法实现这一点 我喜欢在我的问题中包括工作示例,但在这种情况下,对服务器的调用延迟是问题的一部分 谢谢 $('#getSelect
$('#getSelectOptions').bind("click", function() {
populateSelect(this);
});
function populateSelect(whatWasClicked) {
var thisSelect = $(whatWasClicked).parents("div").find("select") ;
var before = function() { $(loading).show() ; } ;
var complete = function() { $(loading).hide() ; } ;
var data = {'_service' : 'myService', '_program' : 'myProgram' } ;
var error = function(){alert("Error"); } ;
var success = function(request) { $(thisSelect).html(request) ; };
var waitTime = 20000 ;
ajaxCall(thisSelect, waitTime, before, complete, data, success, error ) ;
}
function ajaxCall(elementToPopulate, waitTime, whatToDoBeforeAjaxSend,
whatToDoAfterAjaxSend, dataToSendToTheServer,
whatToDoAfterSuccess, whatToDoAfterError) {
$.ajax({
type: "post",
url: "http://myURL/cgi-bin/broker",
dataType: "text",
data: dataToSendToTheServer,
timeout: waitTime,
beforeSend: whatToDoBeforeAjaxSend,
error: whatToDoAfterError(request),
success: whatToDoAfterSuccess(request)
});
}
编辑如何写一个好问题的继续教育。。。我应该提到我调用populateSelect来填充多个select。所以我需要一种方法来引用每个select的结果,JavaScript的作用域是这样的,如果您刚刚声明了一个全局变量,那么您应该能够从ajax success函数和click函数中访问它
var _global_holder = null;
$('#getSelectOptions').bind("click", function() {
if(_global_holder==null) { whatever }
populateSelect(this);
});
function populateSelect(whatWasClicked) {
if(_global_holder !== null) {
whatever
} else { whatever else }
ajaxCall(thisSelect, waitTime, before, complete, data, success, error ) ;
}
function ajaxCall(elementToPopulate, waitTime, whatToDoBeforeAjaxSend,
whatToDoAfterAjaxSend, dataToSendToTheServer,
whatToDoAfterSuccess, whatToDoAfterError) {
...
}
在您给出的示例中,您只有一种AJAX请求类型,
POST
ed每次使用相同的数据发送到相同的URL。如果是这种情况,您应该只需要以下内容:
var brokerResponse = null; // <-- Global variable
function populateSelect(whatWasClicked) {
var thisSelect = $(whatWasClicked).parents("div").find("select") ;
if (!brokerResponse) { // <-- Does an old response exist? If not, get one...
var before = function() { $(loading).show() ; } ;
var complete = function() { $(loading).hide() ; } ;
var data = {'_service' : 'myService', '_program' : 'myProgram' } ;
var error = function(){alert("Error"); } ;
var success = function(request) { // <-- Store the response before use
brokerResponse = request;
$(thisSelect).html(brokerResponse);
};
var waitTime = 20000 ;
ajaxCall(thisSelect, waitTime, before, complete, data, success, error ) ;
}
else { // <-- If it already existed, we get here.
$(thisSelect).html(brokerResponse); // <-- Use the old response
}
}
jQuery有一个$.data方法,可用于存储/检索与页面上任何元素相关的项
//e.g. create some object
var inst = {};
inst.name = 'My Name'
var target = $('#textbox1');
//save the data
$.data(target, 'PROP_NAME', inst);
//retrieve the instance
var inst = $.data(target, 'PROP_NAME');
答案的第二部分,使用元素的ID引用全局数组中的数据,是一个很好的答案。我希望一个存储在变量中的函数可以在ajaxCall函数中传递和执行,但我猜js不是这样工作的。简单地检查select是否已经填充不是很容易吗?并且可以将函数作为变量传递。您只需将函数名(不带引号或())分配给一个变量,您可以通过简单地执行variable()来执行它。您是对的……这是避免重复进行ajax调用的一个好方法……但我确实想要一种存储(ajax调用)结果的方法,以便重复使用。我无法使用function-as-a-variable方法来存储ajax结果..当我在第二次调用中引用全局变量时,它是“未定义的”
//e.g. create some object
var inst = {};
inst.name = 'My Name'
var target = $('#textbox1');
//save the data
$.data(target, 'PROP_NAME', inst);
//retrieve the instance
var inst = $.data(target, 'PROP_NAME');