2011-02-10 2 views
1

первый таймер здесь так хорошо: 3.Переписывание URL-адреса, если оно 404's

Я пытаюсь написать функцию jQuery, которая перезаписывает URL-адрес Amazon, чтобы включить теги филиала, похожие на то, что делает StackExchange, но с завихрением.

Главные отличия в том, что я пытаюсь найти пользователя в ближайшем магазине Amazon Store - например, amazon.de - для немецких посетителей. Из-за того, что ASIN Amazon отличается в некоторых странах, я сначала хочу проверить новую ссылку, если это 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.

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 строит & запрашивает новую ссылку, открывает его с помощью Curl PHP и возвращает либо новую ссылку или «404» ,

Я думаю, что $ (это) неправильно ссылается на ссылку, но я понятия не имею, почему.

ответ

2

ошибка говорит, что все это: is not allowed by Access-Control-Allow-Origin

Это в основном означает, что ваш браузер не имеет право для получения какого-либо URL за пределами вашего домена. Вы можете исправить это, переписав свой запрос ajax на локальный PHP-скрипт, который проверяет URL-адрес.

Это что-то делать с http://en.wikipedia.org/wiki/Same_origin_policy

+0

Спасибо, я буду продолжать расследование в попытке его с некоторыми PHP. У вас есть представление о том, почему мой пример API Yahoo не переписывает URL? Я бы предпочел использовать этот метод, поскольку внешний запрос API, надеюсь, снизит нагрузку на сервер. – killgallic

0

вы также можете использовать апачский mod_proxy

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

Тогда вы можете вызвать URL/зеркало/Foo/на вашем домене, и он передаст запрос к перенаправление удаленного URL.

Это распространенный способ преодоления ограничений междоменного браузера.

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

Смежные вопросы