Междоменные запросы с использованием JQuery с использованием YQL - PullRequest
0 голосов
/ 08 июля 2010

Так что мне нужно сделать кросс-доменный запрос, когда ответ не отформатирован в JSON, поэтому я не могу использовать .getJSON.Очевидно, .get не работает, потому что это междоменный запрос.

Я сталкивался с этим ( Прочитайте это ), когда я гуглил, и кажется, что он должен работать для того, что я хочу сделать (то есть сделать междоменный вызов, который не отформатирован в json)используя плагин jquery).Мой код выглядит следующим образом.Я знаю, что URL работает нормально, потому что, если я вставлю его в свой браузер, я смогу увидеть ответ, который согласно документации last.fm

Тело ответа сервера состоит из серии \ n(ASCII 10) завершенные строки.Типичный успешный ответ сервера будет выглядеть примерно так:

OK
17E61E13454CDD8B68E8D7DEEEDF6170
http://post.audioscrobbler.com:80/np_1.2
http://post2.audioscrobbler.com:80/protocol_1.2

Так что я знаю, что мой URL в порядке.Теперь мне интересно, как я могу получить эту информацию и почему моя версия их примера не работает.

function performHandshake(sk, token, ts){

    var token = md5(apiSecret + ts);
    var urlToUse = "http://post.audioscrobbler.com/?hs=true&p=1.2.1&c=tst&v=1.0&u=chamals&t=" + ts + "&a=" + token + "&api_key=" + apiKey + "&sk=" + sk + "&format=xml&callback=cbfunc";
            $('#container').load(urlToUse);
    $.ajax({
        url: urlToUse,
        type: 'GET',
        success: function(res){
            var headline = $(res.responseText).find('a.tst').text();
            window.console.log(headline);   
        }   
    });

}

Ответы [ 4 ]

1 голос
/ 09 июля 2010

Ну, на странице, на которую вы ссылаетесь, говорится об использовании YQL и jQuery. Это очень интересное решение. Однако ваш пример, похоже, пропускает часть YQL (что крайне важно).

var urlToUse = "http://post.audioscrobbler.com/?hs=true&p=1.2.1&c=tst&v=1.0&u=chamals&t=" + ts + "&a=" + token + "&api_key=" + apiKey + "&sk=" + sk + "&format=xml&callback=cbfunc";

var yqlUrl2Use = "http://query.yahooapis.com/v1/public/yql?"+
            "q=select%20*%20from%20html%20where%20url%3D%22"+
            encodeURIComponent(urlToUse)+
            "%22&format=xml'&callback=?"
    // this function gets the data from the successful 
    // JSON-P call

Тогда вам нужно будет позвонить по новому URL-адресу в виде запроса JSONP ...

$.getJSON(yqlUrl2Use, function(json){
    // figure out the format of the answer here...   
});
1 голос
/ 08 июля 2010

Да, кросс-браузерный сценарий.Вы не можете AJAX ничего подобного, поскольку это нарушает ту же политику домена.

Вам потребуется настроить прокси на том же сервере, с которого запускается JavaScript.

Редактировать Похоже, вам нужен бит $('#container').load(url), чтобы это работало,

Вернитесь и перечитайте связанную статью.

0 голосов
/ 09 июля 2010

Var Res фактически содержит мою информацию, которая мне нужна.Я думаю, что их заголовок = часть была специально для их реализации.

Спасибо тем, кто помог!

0 голосов
/ 08 июля 2010

Вам необходимо использовать $.getJSON вместо $.ajax() для возврата информации о нескольких сайтах.

...