![](/img/trans.png)
[英]Populating A Page with XML and Javascript/Jquery, checking if the url is the same as an xml tag
[英]Checking a Url in Jquery/Javascript
我所需要的只是一个在 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...
}
这不是 AJAX 的工作方式。 AJAX 本质上是异步的(这实际上是第一个 'A' 所代表的),这意味着您调用一个函数并传入一个回调,而不是调用一个函数并返回一个值,然后将使用该值调用该回调.
(参见http:\/\/en.wikipedia.org\/wiki\/Continuation_passing_style<\/a> 。)
知道 URL 是否响应后,您想做什么? 如果您打算像这样使用此方法:
//do stuff
var exists = urlExists(url);
//do more stuff based on the boolean value of exists
urlExists()<\/code>无法返回,因为它需要等待请求。
要么给它一个回调,要么让它同步(不推荐,因为它会锁定浏览器)。
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)
});
};
基本上,您的代码没有任何问题。 在这里看到它的工作:http: \/\/jsfiddle.net\/PK76X\/<\/a>
我的猜测是您正在使用它来检查不同域上内容的可用性,这会失败,因为浏览器不允许跨域 ajax 请求。
如果 url 来自与您的页面相同的域,您可以这样做。 但是如果它来自不同的域,例如 google.com,那么由于跨域安全性,它将失败。
一般来说,您可能应该使用 firebug 插件在 Firefox 中运行您的脚本。 它将为您提供解决问题所需的详细信息。
ajax 和 post 方法是异步的,因此您应该在回调方法中处理结果。
AJAX 基本上是异步的,这就是您所描述的行为的原因。 我使用了以下内容,它是免费的,以同步方式获得一个简单的真\/假指示 URL 是否有效:
function isValidURL(url) {
var encodedURL = encodeURIComponent(url);
var isValid = false;
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
type: "get",
async: false,
dataType: "json",
success: function(data) {
isValid = data.query.results != null;
},
error: function(){
isValid = false;
}
});
return isValid;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.