【问题标题】:Change url with ajax call使用 ajax 调用更改 url
【发布时间】:2013-01-25 22:56:18
【问题描述】:

我正在做跨域 GET 来获取这样的 cnn html:

$(function(){

var site = 'http://cnn.com';

$.get('proxy.php', { site:site }, function(data){

$(data).appendTo('#div');

}, 'html');

});

我得到了我需要的一切,除了 url 有时不是完整的 url,而是指向服务器上的某个路径,如下所示:

/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3

所以问题是,如果有人点击我网站上的链接,网址将如下所示:

http://MY-WEBSITE/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3

如何摆脱插入的我自己的 url 并将其替换为“cnn.com”? 我尝试了 jquery 拆分和替换,但它不起作用:

href = $(this).prop('href');
url = href.split('/');          
href.replace(url[2], 'cnn.com');

我通常会在控制台“未定义拆分”中收到错误,当我修复它时,错误会转到“未定义 URL”等等。有时(使用其他代码变体)我没有收到任何错误,但它仍然不起作用。我想不通。

【问题讨论】:

  • 您是否尝试过使用 IFrame 跳转到 CNN 网站?

标签: php jquery ajax get cross-domain


【解决方案1】:

查看您的代码,我假设您使用的是 jQuery。

出现问题是因为 cnn.com 上的源代码似乎使用了相对链接。您可以在开头插入 cnn.com 使用以下 jQuery

$(function() {
    $('a').each(function() {
        if ($(this).attr('href').indexOf('http') === 0) {
            $(this).attr('href', 'http://www.cnn.com' + this.href);
        }
    });
});

【讨论】:

  • if 语句只是为了确保它只更改相对链接
【解决方案2】:

您可以简单地检查 url 是否是相对的。最简单的方法是检查它是否以 http:// 开头。

var url = $(this).prop('href');
if (!(/^http/).test(url)) 
{
    url = site + url; // prepend "http://cnn.com" to the address
}

alert(url); // url is now a full url

如果你想要一个更通用的解决方案,你可以使用网站上的 regexp 对象来确定前缀是否存在。

var site = "http://cnn.com";
var siteRegex = new RegExp("^" + site); // Regex - Starts with site
var url = $(this).prop('href');
if (!siteRegex.test(url))
{
   url = site + url;
}

alert(url);

【讨论】:

  • 我喜欢它,它很简单。我稍后会在我的服务器上测试它
【解决方案3】:

这个小功能可以通用:

function RelativeToAbsoluteURL(root, url) {
    var httpMatch = /https?:\/\//ig;
    if (!httpMatch.test(url)) {
        return root + (url.substr(0, 1) != "/" ? "/" + url : url);
    } else {
        return url;
    }
}

用途:

RelativeToAbsoluteURL("http://www.cnn.com", "http://www.cnn.com/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3");

RelativeToAbsoluteURL("http://www.cnn.com", "/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3");

两者都会输出相同的 URL (http://www.cnn.com/2013/01/24/business/samsung-record-fourth-quarter-2012-profits/index.html?hpt=hp_t3)

【讨论】:

    【解决方案4】:

    DEMO

    似乎都可以:

    var href = $(this).attr('href');
    var url = (href.indexOf("/")===0) ? "http://...."+href:href;
    

    可能的替代方案 - 这将返回来自 href 的完全限定 URL

    var href = this.href; // actual href and not the property
    var url =(href.indexOf(location.hostname)===7) ? href.replace(location.hostname,"www.cnn.com"):href;
    

    使用道具

    var href = $(this).prop('href');
    var url = (href.indexOf("/")===0) ? "http://...."+href:href;
    

    【讨论】:

    • 我在控制台中得到这个:TypeError: Object # has no method 'prop'
    • 我没有要求道具,我要求的是一种方法来完成这项工作。道具只是我尝试过的东西,仅此而已。无论如何,我认为我不能用 chrome 控制台做到这一点,我稍后会在我的服务器上尝试
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多