use*_*632 6 javascript url jquery
我需要的只是一个方法,如果Url响应,则返回true.不幸的是,我是jQuery的新手,它让我尝试编写这种方法相当令人沮丧.
我已经看过几个使用.ajax的jQuery示例,但代码一直在我身上失败.怎么了?
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...
}
Run Code Online (Sandbox Code Playgroud)
Han*_*-Oh 21
这不是AJAX的工作方式.AJAX基本上是异步的(实际上是第一个'A'代表的意思),这意味着而不是你调用一个函数并且它返回一个值,你调用一个函数并传入一个回调函数,并且将使用该函数调用该回调.
(见http://en.wikipedia.org/wiki/Continuation_passing_style.)
在知道URL是否响应后,您想要做什么?如果您打算像这样使用此方法:
//do stuff
var exists = urlExists(url);
//do more stuff based on the boolean value of exists
Run Code Online (Sandbox Code Playgroud)
然后你要做的是:
//do stuff
urlExists(url, function(exists){
//do more stuff based on the boolean value of exists
});
Run Code Online (Sandbox Code Playgroud)
在哪里urlExists():
function urlExists(url, callback){
$.ajax({
type: 'HEAD',
url: url,
success: function(){
callback(true);
},
error: function() {
callback(false);
}
});
}
Run Code Online (Sandbox Code Playgroud)
urlExists() 无法返回,因为它需要等待请求.
传递回调,或使其同步(不推荐,因为它锁定了浏览器).
var urlExists = function(url, callback) {
if ( ! $.isFunction(callback)) {
throw Error('Not a valid callback');
}
$.ajax({
type: 'HEAD',
url: url,
success: $.proxy(callback, this, true),
error: $.proxy(callback, this, false)
});
};
Run Code Online (Sandbox Code Playgroud)
那你可以做
urlExists('/something', function(success) {
if (success) {
alert('Yay!');
} else {
alert('Oh no!');
}
});
Run Code Online (Sandbox Code Playgroud)
值得一提的是相同的原产地政策.
此外,从匿名函数的作用域返回将不会在父函数中返回(就像在原始示例中一样).它只返回内部函数.要从内部返回到父级,请设置一个标志并将其返回.
| 归档时间: |
|
| 查看次数: |
43721 次 |
| 最近记录: |