如果是404,则重写URL

时间:2011-02-10 07:04:49

标签: javascript jquery

这里的第一个计时器很好:3。

我正在尝试编写一个jQuery函数,该函数重写Amazon URL以包含会员标签,类似于StackExchange所做的但有一点扭曲。

主要区别在于我正在尝试将用户带到他们最近的亚马逊商店 - 例如amazon.de - 适合德国游客。由于亚马逊的ASIN在某些国家有所不同,我首先想查看新的链接,如果是404,我显然不想指导我的访客[1]

这是我的代码,它选择指向amazon.com的链接,获取ASIN号码并在产品上写下一个短链接,包括会员标签。

var tld_table = {'GB' : ".co.uk",'DE' : ".de",'CN' : ".cn",'AU' : ".ca",'IT' : ".it",'FR' : ".fr",'CA' : ".ca",'JP' : ".jp",};
var country = $.cookie("CountryCode"); 
//$.cookie by http://plugins.jquery.com/files/jquery.cookie.js.txt
var tld = tld_table[country] || '.com';
var regex = RegExp("http://www.amazon.com/([\\w-]+/)?(dp|gp/product)/(\\w+/)?(\\w{10})");
$('a[href*="amazon.com"]').each(function(){
var url = $(this).attr('href');
m = url.match(regex);
    if (m) { //if ASIN found
    var ASIN = m[4];
    var shorturl = "http://www.amazon"+tld+"/dp/" + ASIN + "?tag="+ affTag[tld];
        //http test for 404
        //if 404 do not rewrite
        //else $(this).attr('href',shorturl);
    }
});

这样可以正常工作并重写URL,但是当我将ajax引入等式时,脚本无法重写任何URL。

修改

$('a[href*="amazon.com"]').each(function(){
    var url = $(this).attr('href');
    m = url.match(regex);
    if (m) { //if ASIN found http://www.amazon.com/dp/B003DZ1Y8Q/?tag=derp
    var ASIN = m[4];
    var ajaxCall = $.get('ASIN.php?ASIN='+ASIN+'&tld='+tld+'&tag='+affTags[tld], function(data) {
        var newlink = data;
        console.log('New Link: '+newlink)
        $(this).attr('href',newlink); //does not rewrite
    })
    ajaxCall.success(function() {
    if(newlink != '404'){ 
        $(this).attr('href',newlink);//does not rewrite
        }
    })  
    }

});

以上是我目前正在尝试使用的代码,ASIN.php build&请求新链接,使用php的cURL打开它并返回一个新链接或'404'。

我认为$(this)无法正确引用链接,但我不知道为什么。

2 个答案:

答案 0 :(得分:2)

错误说明了一切:is not allowed by Access-Control-Allow-Origin

这基本上意味着您的javascript不允许检索域外的任何网址。您可以通过将ajax请求重写为检查URL的本地PHP脚本来解决此问题。

它与http://en.wikipedia.org/wiki/Same_origin_policy

有关

答案 1 :(得分:0)

你也可以使用apache mod_proxy

ProxyPass /mirror/foo/ http://foo.com/

然后你可以在你的域名上调用url / mirror / foo /,它会将请求传递给转发远程网址。

这是克服跨域浏览器限制的常用方法。

http://httpd.apache.org/docs/1.3/mod/mod_proxy.html#proxypass