我在使用AJAX和数据范围方面遇到了一些问题。我是Javascript的新手,我不确定如何解决我的问题。
var urlList = new Array();
$.ajax({
url: "http://localhost:3000/url",
success: function(data) {
alert(data.expressions.url); //This shows the correct result
urlList[0] = obj.expressions.dom;
}
});
alert(urlList[0]); //this shows undefined
我需要urlList[0]
中的数据,以便我以后可以使用它。我认为这是一个范围问题。
有人能指出我正确的方向吗?
由于
答案 0 :(得分:3)
这不是范围问题,而是时间问题。 ajax方法是异步执行的。这意味着调用它不会导致程序等到它完成。这导致在请求完成之前显示警报。
要解决此问题,请将请求放在成功函数中。这是处理请求结果的适当位置。
var urlList = new Array();
$.ajax({
url: "http://localhost:3000/url",
success: function(data) {
alert(data.expressions.url); //This shows the correct result
urlList[0] = obj.expressions.dom;
// This might work now, depending on what `obj.expressions.dom` is. This
// isn't becoming clear from your code. Usually you would use the `data`
// parameter of the success function, which contains the response body of
// the ajax request that has just finished.
alert(urlList[0]);
// of course you can call other functions as well. For instance, you
// could call
urlListChanged();
// ..which you can declare in global scope. This way, you can repond to
// changes from multiple sources, without having to duplicate code.
// It will all work, as long as you use the success handler as the trigger.
}
});
function urlListChanged()
{
alert(urlList[0]);
}
答案 1 :(得分:1)
你的问题是按时间顺序排列的。
$.ajax
触发异步请求,这意味着代码之后的其余代码将在请求解决之前继续执行。由于urlList
仅在请求结算后填充,因此您的提醒过早发生。
更改
$.ajax...
到
var req = $.ajax...
并将警报包装成成功回调:
req.done(function() { alert(urlList[0]); });
...或者只是在现有的success
回调中移动提醒。