这里的第一个计时器很好: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)无法正确引用链接,但我不知道为什么。
答案 0 :(得分:2)
错误说明了一切:is not allowed by Access-Control-Allow-Origin
这基本上意味着您的javascript不允许检索域外的任何网址。您可以通过将ajax请求重写为检查URL的本地PHP脚本来解决此问题。
有关答案 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