2014-08-08 5 views
-1

Я использую метод Jaju .ajax для вызова URL-адреса, который возвращает строку, закодированную в JSON. Я вижу объект, возвращенный из GET в отладчике, но по какой-то причине я не попадаю в функцию успеха. Есть идеи?.ajax return json object, но без успеха

$.ajax({ 
     type:  "GET", 
     url:  'http://search.issuu.com/api/2_0/document?q=jamie', 
     dataType: "jsonp", 
     success: function(data){ 
      alert('Success!'); 
     } 
}); 

Debugger

+0

Сделайте это так:> ** http: //jsfiddle.net/adeneo/xrk4z6ur/** и откройте консоль (F12) и сообщите нам, что вы получаете? – adeneo

+2

Он возвращает объект, поэтому вам не нужно использовать JSONP. –

+0

Это, очевидно, не возвращает объект, как бы внешняя страница когда-либо могла возвращать объект. С другой стороны, он не возвращает JSONP, а просто обычный JSON, поэтому в игру вступает одна и та же политика происхождения, и этого не может быть сделано. – adeneo

ответ

3

Если вы посмотрите на documentation, это показывает, что правильный способ сделать запрос JSONP требует параметра jsonCallback.

Код:

$.ajax({ 
     type:  "GET", 
     url:  'http://search.issuu.com/api/2_0/document?q=jamie&jsonCallback=?', 
     dataType: "jsonp", 
     success: function(data){ 
      alert('Success!'); 
     } 
}); 

Fiddle:http://jsfiddle.net/xrk4z6ur/2/

JQuery будет с помощью callback=? по умолчанию для запроса JSONP. В этом случае API принимает jsonCallback. Добавление jsonCallback=? к URL-адресу позволит jQuery правильно обрабатывать его.

+0

Да, это работает. Проблема, однако, в том, что issu.com отправляет неверную строку json, поэтому я не могу разобрать ее с помощью jQuery.parseJSON(). Надеюсь, они это исправит. – Malchesador

+0

1) Я не получаю неправильный json. 2) JSONP уже проанализирован - он возвращает вам функцию (если вы укажете jsonCallback = callback, например), в качестве параметра json-объекта. – elzi

+0

@Malchesador У вас есть доказательства? Из примера, который вы дали, issu.com делает все правильно. См. Http://jsfiddle.net/xrk4z6ur/4/, где я выводил объект ответа на консоль и показывал пример использования ответа. – tcooc

0

Если вы используете JSONP следует указать обратного вызова параметр GET как & обратного вызова? На стороне сервера возвращает обратный вызов с нужными данными в качестве аргумента (JSON закодированного)

+0

У меня нет никакого контроля над тем, что они делают на issu.com. – Malchesador

+1

Тогда вы не можете выполнить обратный вызов jsonp, и, что более важно, вы не можете выполнить кросс-сайт, как хотите. Сервер должен быть осведомлен о jsonp и желать, чтобы делать то, что вы хотите. – Pluto