我已经花了好几个小时才能让它发挥作用,但它并没有让步;我有以下代码:
var text = "";
function getText(c1, c2)
{
url = "http://en.wikipedia.org/w/api.php?format=json&action=query&titles=" + c1 + "-" + c2 + "_relations&prop=revisions&rvprop=content"
$.ajax({
type: "GET",
dataType: "jsonp",
async: false,
url: url,
success: function (data) {
var obj = (data.query.pages );
var keys = [];
for(var k in obj) keys.push(k);
if (keys[0] == -1) {
//Link doesnt exist
text = "-1";
return text;
}
//Link Exists
else {
link = "http://en.wikipedia.org/wiki/" + c1 + "-" + c2 + "_relations"
text = c1 + "-" + c2 + " Relations"
return text;
}
}
});
return text;
}
var a = (getText(country1, country2))
alert(text);
alert(a);
我正在制作ajax请求;一个简单的查询,以查看维基是否在任何给定的国家之间有一个页面。 如果我在内部使用alert,它工作正常,并在text变量中返回正确的数据。但是,当在外部调用getText函数时,text变量始终为空。我已经尝试了所有我能想到的东西,包括让应用程序睡了一段时间,但即使这样也行不通。我知道async不能从ajax 1.8开始工作,但是到底有没有呢?
提前致谢。
答案 0 :(得分:1)
这是因为ajax的异步行为。你不能像这样从ajax返回值。因为该功能不会等待成功事件发生。
当您在该功能中放置警报时,可能会在用户单击警报之前发生成功事件。这就是它返回价值的原因。否则它不会返回值。
在ajax调用中使用async : false
不是一个好习惯。它会冻结浏览器。
好的做法是使用返回的数据调用ajax成功的方法,然后在函数内部对该数据进行操作。