繁体   English   中英

在 Jquery/Javascript 中检查 URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM