Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Не работает callback-функция ajax jsonp запроса


Автор: zodiac 17.6.2013, 14:20
Здравствуйте!
Столкнулся со странной проблемой: никак не хочет вызываться callback функция, когда я пытаюсь сделать кроссдоменный GET jsonp запрос на сервер. Ответ сервера - полностью валидный json, который прекрасно парсится и понимается jquery. При попытке посмотреть сообщения об ошибках я получаю следующее:
- содержимое textStatus:
parseerror
- содержимое errorThrown:
jsonpCalback was not called

Код ajax-запроса:
Код

$.ajax({
    url: url,
    type:"get",
    dataType: "jsonp",
    jsonp:"callback",
    jsonpCallback:"jsonpcall"
  }).fail(function(jqXHR, textStatus, errorThrown) {
     alert(jqXHR.responseText+' - '+textStatus+' - '+errorThrown);
  }).done(function(data, textStatus, jqXHR) {
      alert(textStatus);
  });


В процессе решения чего только не пробовал: по советам со StackOverflow ставил jsonp:false, пробовал указывать jsonpcall глобально (window.jsonpcall=function...), пробовал использовать простой $.getJSON и множество других телодвижений, которые, однако, не помогли. Имя callback-функции успешно подставляется в url, но вызывается fail().

Помогите разобраться, пожалуйста, совершенно не знаю, что с этим делать :(

Автор: zodiac 17.6.2013, 14:44
Все в порядке, проблема решена неожиданным способом.

Решение
При jsonp запросах ответ сервера не должен представлять собой json-объект. Это должна быть функция, параметром которой передан валидный json.

Для примера, когда jquery-код имеет следующий вид...
Код

$.ajax({
    url: url,
    type:'get',
    dataType: 'jsonp',
    jsonp:'callback',
    jsonpCallback:"jsonpcall"
});


...сервер должен отдать ответ в следующем формате:
Код

jsonpcall({"data":"variable"})


Со стороны php-кода это выглядит так:
Код

$data='jsonpcall({"data":"variable")';
exit($data);


Надеюсь, кому-то данная информация окажется полезной и не заставит тратить пять часов  smile 

Автор: Staind 16.10.2014, 14:25
zodiac, спасибо, что отписался. Помог разобраться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)