继续
JQuery – Storing ajax response into global variable
接受的解决方案不知何故对我不起作用.
$(document).ready(function() {
var dataStore = (function(){
var xml;
$.ajax({
type: "GET",url: "/?do=getcontentadm1n&category=homepage",dataType: "json",success : function(data) {
xml = data.html;
alert(xml); // WORKS
}
});
return {getXml : function()
{
if (xml) return xml;
}};
})();
var somevar = dataStore.getXml();
alert(somevar); // UNDEFINED
});
还有其他解决方案吗?
谢谢.
解决方法
它是空的,因为在调用getXml时,ajax请求尚未完成,请记住ajax是异步的.解决它的一种方法是强制它同步:
$.ajax({
async: false,type: "GET",success : function(data) {
xml = data.html;
alert(xml); // WORKS
}
});
回应评论:
I want perform AJAX onclick,then store data.html for other mouse events
var dataStore = (function(){
var html;
function load(){
$.ajax({
async: false,success : function(data) { html = data.html; }
});
}
return {
load : function() {
if(html) return;
load();
},getHtml: function(){
if(!html) load();
return html;
}
}
})();
$(element1).click(function(){
dataStore.load();
});
$(element2).click(function(){
var html = dataStore.getHtml();
// use html
});