2011-02-10 5 views
1

첫 번째 타이머가 좋음 : 3.URL을 다시 작성하는 경우 404의

아마존 URL에 태그를 포함하도록 재 작성하는 jQuery 함수를 작성하려고합니다. StackExchange와 유사하지만 꼬임이 있습니다.

가장 큰 차이점은 가장 가까운 Amazon 스토어로 사용자를 연결하려고한다는 것입니다. 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의 재 작성하지만 내가 방정식으로 아약스를 소개 할 때 스크립트가 모든 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는, & 요청 새로운 링크를 구축 PHP의 컬을 사용하여 열고 새 링크 또는 중 하나를 반환 '404' .

$ (this)가 링크를 올바르게 참조하지 못하고 있지만 그 이유는 모르겠습니다. is not allowed by Access-Control-Allow-Origin

그것은 기본적으로 자바 스크립트가 사용자의 도메인 외부의 URL을 검색 할 수 없습니다 것을 의미합니다 :

답변

2

오류는 모두 말한다. ajax 요청을 url을 검사하는 로컬 PHP 스크립트로 다시 작성하여이 문제를 해결할 수 있습니다.

그것은 당신이 또한 당신의 도메인/URL이/거울/foo를 호출 할 수 있으며이 요청을 전달합니다 아파치 mod_proxy를 다음

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

을 사용할 수 있습니다 http://en.wikipedia.org/wiki/Same_origin_policy

+0

감사합니다. 몇 가지 PHP로 시도해보고자합니다. 내 Yahoo API 예제가 URL을 다시 쓰지 않는 이유에 대한 통찰력이 있습니까? 나는이 방법을 외부 API 요청으로 사용하여 내 서버로드를 줄이는 것을 선호한다. – killgallic