JQuery JSONP, работает только с теми же URL сайта - PullRequest
1 голос
/ 21 мая 2010

Мне нужно сделать запрос к API, который возвращает данные в формате json. Этот API находится в поддомене домена, в котором будет выполняться этот скрипт (хотя в данный момент он находится в совершенно другом домене для dev, localhost)

Почему-то я думал, что jsonp должен был включить это поведение, что мне не хватает?

Использование jQuery 1.4.2

$.ajax({
    url:'http://another.example.com/returnsJSON.php',
    data: data,
    dataType:'jsonp',
    type: "POST",
    error: function(r,error) {
        console.log(r);
        console.log(error);
    },
    success:function(r){
    console.log(r);
    }
});

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

Измените ваш тип с «POST» на «GET». То есть, только если вы намереваетесь получить данные.

2 голосов
/ 21 мая 2010

Вам понадобится сочетание ответа Арно (не используйте POST) и ответа Р. Бемроуза (убедитесь, что на стороне сервера возвращает JSONP) с добавленной спецификацией функции обратного вызова.

Другими словами, вот ваш модифицированный код запроса:

function dosomething(data) {
    console.log(data);
}

$.ajax({
    url: 'http://another.example.com/returnsJSON.php',
    data: data,
    dataType: 'jsonp'
});

Полезно отметить, что в сгенерированном коде вы увидите, что когда dataType равен "jsonp", jQuery выводит тег сценария, указывающий на URL; это не типичный XHR. Вы также можете использовать getQSON () * jQuery *) 1007 * здесь.

Тогда ваш ответ должен быть отформатирован так:

dosomething({
    test: 'foo'
});

Когда вызов будет завершен, указанный вами обратный вызов сработает.

1 голос
/ 21 мая 2010

Вы модифицировали серверный компонент для использования JSONP?

Вы не можете просто сказать клиенту использовать JSONP и внезапно ожидать, что JSON-скрипт на стороне сервера вернет правильный результат.

В частности, JSONP требует, чтобы сервер возвращал строку JavaScript, которая вызывает определенную функцию (имя которой передается с другими аргументами) с возвращаемыми результатами, которые клиент затем eval s.

...