JSONP: как построить ajax-запрос? - PullRequest
3 голосов
/ 10 мая 2011

Я пытаюсь работать с JSONP API в разных доменах. Это пример данных, которые он возвращает:

photos({"marker":{"@attributes":{"id":"30601","latitude":"52.638061","longitude":"-2.117067","feature":"3","caption":"cat","thumbnailSizes":"60|120|150|180|200|250|300|350|400|400|425|450|500|640"}}});

Как я могу создать Ajax-вызов, который использует эти данные? Я продолжаю получать сообщения об ошибках.

Это то, что я сейчас пытаюсь:

$.ajax({
    url: pm_url,
    data: {},
    type: "get",
    dataType: "jsonp",
    cache: false,
    success: function(data) {
        console.log(data);
    },
    error: function() {
        alert('Sorry, there was a problem getting the photos!');
    }

В Firebug я вижу, что данные выше извлекаются, но затем я вижу сообщение об ошибке.

Что не так с запросом? (Или данные - хотя они проверяются как JSONP.)

UPDATE:

Спасибо за предложения. Я сейчас пытаюсь:

            var photos = function (data) {
              alert(data);
            };
            $.ajax({
                url: pm_url,
                dataType: 'jsonp',
                jsonpCallback: 'photos',
            });

Это, как ни странно, вызов двух URL в Firebug:

http://myapi.com/file.jsonp?x=1&y=2?callback=?
http://myapi.com/file.jsonp?x=1&y=2?callback=photos&_=1304982373561

Первый URL-адрес отображается в консоли как ошибка. Что я делаю не так?!

Возможно, что сам API неверен (им требуется суффикс .jsonp и игнорируется значение обратного вызова, поэтому имя функции фиксировано), но я надеялся, что смогу обойти его.

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Имя функции (фотографии) неверно. jQuery отправит GET-параметр с именем «обратный вызов», значение этого параметра - это имя, которое должна иметь функция.

Ответ, PHP-пример:

<?php echo $_GET['callback'].'('.json_encode($some_object).');';?>

Чтобы объяснить, что происходит с jsonp:

при условии, что параметр обратного вызова отправляется со значением jquery1234: jQuery создаст временную функцию:

function jquery1234(data){return data;}

Так что, если вы отправите ответ вроде

jquery1234({'somevar':'somevalue'});

... jQuery создаст элемент-скрипт этого ответа, функция будет вызвана и объект будет передан в функцию success.

0 голосов
/ 10 мая 2011

Почему бы не использовать $ .getJSON ()?http://api.jquery.com/jQuery.getJSON/

...