继续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
});
还有其他解决方案吗?
感谢。
答案 0 :(得分:11)
它是空的,因为在调用getXml
时,ajax请求尚未完成,请记住ajax是异步的。绕过它的一种方法是强制它同步:
$.ajax({
async: false,
type: "GET",
url: "/?do=getcontentadm1n&category=homepage",
dataType: "json",
success : function(data) {
xml = data.html;
alert(xml); // WORKS
}
});
回应评论:
我想要执行AJAX onclick,然后将data.html存储为其他鼠标事件
var dataStore = (function(){
var html;
function load(){
$.ajax({
async: false,
type: "GET",
url: "/?do=getcontentadm1n&category=homepage",
dataType: "json",
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
});
答案 1 :(得分:2)
ajax调用是异步的。当你打电话时,它可能还没有完成运行:
var somevar = dataStore.getXml();
答案 2 :(得分:1)
好的,这是我的第一个回复,但在这里。
我自己一直在反对这个问题并且学会了这个。
在函数外部定义变量时,它会自动添加到“窗口”对象中。
所以,如果我们这样做:
var myValue;
function setValue()
{
myValue = "test";
}
// Assuming setValue() has been run
function getValue()
{
alert(window.myValue); // yup, it's "test"
}
因此,如果我们使用这些知识将$ .ajax数据存储在变量中,它就会像这样。
var xml;
$.ajax({
type: "GET",
url: "/?do=getcontentadm1n&category=homepage",
dataType: "json",
success : function(data) {
window.xml = data;
}
});
alert(window.xml);
我认为这对许多人来说会很清楚,并且会得到你的回答。 感谢您阅读我的回复和来源:http://snook.ca/archives/javascript/global_variable
编辑:
如下面的评论中所述,这仅适用于async = false
。
答案 3 :(得分:0)
@ggreiner:忘记在变量中使用函数。你让其他用户感到困惑。
我有点生气,但没什么个人的,互联网上没有任何解决方案可以将AJAX数据存储在变量中并在事件中使用它们。
不需要在变量中使用任何函数,例如var dataStore =(function(){。每次需要数据时,这将调用其他服务器请求。
以下是调用ajax ONCE的代码,并将其数据用于任何其他事件,函数。这是99%的用户要求这个
的主要问题$(document).ready(function() {
var html; // DEFINE VARS
var css;
var js;
$('.editbutton').live('click', function() {
$.ajax({
async : false, // !!!MAKE SURE THIS ONE IS SET!!!
type : "GET",
url : "/?do=getcontent",
data : { category: category },
dataType: 'json',
success : function(data) {
if (data.status == 'ok') {
html = data.html; // !!!STORE!!!
css = data.css; // !!!STORE!!!
js = data.js; // !!!STORE!!!
}
if (data.status == 'error') {
alert('ERROR!');
}
}
});
});
// CALL ANY STORED VARIABLE FROM ANYWHERE
$('.otherbutton').live('click', function() {
alert(html); alert(css); alert(js);
});
});
答案 4 :(得分:0)
只需使用 Geslacht I_Agegrp
1 0.4761905 0.34085213
2 0.4761905 0.13784461
3 0.5785124 0.34710744
4 0.5785124 0.34710744
5 0.5270758 0.15162455
Ajax,不要使用'async:false'
关键字进行全局响应。