2011-02-10 7 views
1

ここに最初のタイマーはいいので:3。URLを書き換えている場合404の

StackExchangeのようなアフィリエイトタグを書き換えるためにAmazon URLを書き換えるjQuery関数を記述しようとしていますが、捻じれています。

主な違いは、ユーザーに最も近いAmazonストアを試してみることです。 amazon.de - ドイツ人の訪問者のため。 Amazonの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の書き換えに失敗します。

EDIT上記

$('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は、&リクエスト新しいリンクを構築するPHPのcURLのを使用して、それを開き、新しいリンクや「404」のいずれかを返します。 。

私は$(これ)が正しくリンクを参照していないと思っていますが、なぜ私は考えていません。

答えて

2

エラーがそれをすべて言う:is not allowed by Access-Control-Allow-Origin

それは基本的にはあなたのJavaScriptは、あなたのドメインの外の任意のURLを取得することは許されないことを意味します。この問題を解決するには、ajaxリクエストをURLをチェックするローカルのPHPスクリプトに書き換えます。

それはあなたにも、あなたのドメインで/ URL /ミラー/ fooの呼び出すことができ、それはに要求を渡しますApacheのmod_proxyを次に

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

を使用することができますhttp://en.wikipedia.org/wiki/Same_origin_policy

+0

おかげで、私はいくつかのPHPでそれをしようとするに調査しておこう。私のYahoo APIの例でURLの書き換えが行われない理由についての洞察はありますか?私はこのメソッドを外部APIリクエストとして使用したいと思うので、うまくいけば私のサーバー負荷を減らすでしょう。 – killgallic

関連する問題