我所需要的只是一个在URL响应时返回true的方法,不幸的是,我是jQuery的新手,它让我在编写该方法时相当沮丧。
我看过几个jQuery使用. AJAX 的例子,但是代码总是失败。
var urlExists = function(url){
//When I call the function, code is still executing here.
$.ajax({
type: 'HEAD',
url: url,
success: function() {
return true;
},
error: function() {
return false;
}
});
//But not here...
}
6条答案
按热度按时间e0bqpujr1#
AJAX的工作原理不是这样的。AJAX基本上是异步的(这实际上是第一个"A"所代表的),这意味着不是你调用一个函数,它会返回一个值,而是你调用一个函数,传入一个回调函数,这个回调函数会被调用。
(See http://en.wikipedia.org/wiki/Continuation_passing_style.)
在知道URL是否响应后,您要执行什么操作?如果要按如下方式使用此方法:
那么你要做的就是:
其中
urlExists()
为:knsnq2tg2#
urlExists()
无法返回,因为它需要等待请求。要么给它传递一个回调,要么使它同步(不推荐,因为它会锁定浏览器)。
那你就可以
同样值得一提的还有same origin policy。
同样,从父函数中的匿名函数的作用域will not return返回(就像你最初的例子)。它只返回内部函数。要从内部函数返回父函数,设置一个标志并返回它。
xj3cbfub3#
基本上,你的代码没有任何问题。看看它在这里工作:http://jsfiddle.net/PK76X/
我猜您是在使用它来检查不同域上内容的可用性,这会失败,因为浏览器不允许跨域ajax请求。
6yt4nkrj4#
如果url和你的页面来自同一个域,你可以这样做,但是如果它来自不同的域,例如google.com,那么由于跨域安全,它将失败。
w9apscun5#
一般来说,你应该使用firebug插件在Firefox中运行你的脚本,它会给予你解决问题所需的细节。
AJAX 和post方法是异步的,所以应该在回调方法中处理结果。
0vvn1miw6#
AJAX 基本上是异步的,这就是为什么你要描述的行为。我使用了下面的代码,它没有交叉起源,以同步的方式获得一个简单的真/假指示,表明一个URL是否有效:
这种用法是微不足道的:
希望这能帮上忙