2012-02-01 2 views
0

У меня этот результат:Может ли API WikiMedia возвращать недействительный JSON?

["asd", 
    ["Asda","ASDIC","ASD","AsDB","Asdr\u00fabal Cabrera","Asdhoo","\u00c1sd\u00eds Hj\u00e1lmsd\u00f3ttir","Asdr\u00fabal Fontes Bayardo","ASD CF Bardolino Verona","ASD Fiammamonza"] 
] 

Получено с http://en.wikipedia.org/w/api.php?&search=asd&action=opensearch&format=json

При использовании метода getJson из JQuery он не может разобрать JSON выше. Зачем?

+3

Он отлично работает для меня. Что именно вы подразумеваете под «не может разобрать»? Что на самом деле происходит? Может быть, он терпит неудачу из-за [той же политики происхождения] (http://en.wikipedia.org/wiki/Same_origin_policy)? Или какая-то другая причина, не связанная с разбором? – svick

ответ

3

@jakeclarkson прав

Я думаю, что это лучший способ сделать это:

 function onSuccess(data) { 
      alert(data); 
     } 

     function onError(data) { 
      alert(data); 
     } 

     $.ajax({ 
      url:"http://en.wikipedia.org/w/api.php", 
      dataType: 'jsonp', 
      jsonp: 'callback', 
      timeout: 5000, 
      data: 'search=asd&action=opensearch', 
      success: onSuccess, 
      error: onError 
     }); 
+0

Спасибо, друг, это мне очень помогло – ag0702

1

Вызов URL-адреса, который вы написали с помощью jQuery.getJSON(), приведет к ошибке из-за той же политики происхождения, указанной в svick в комментарии выше.

Что вам нужно сделать, это добавить &callback=? на ваш URL. Это заставит jQuery использовать JSONP. См. Раздел JSONP от http://api.jquery.com/jQuery.getJSON/. Следующие должны работать:

$.getJSON("http://en.wikipedia.org/w/api.php?&search=asd&action=opensearch&format=json&callback=?", function (data) { 
    console.log(data); 
}); 
+0

Большое вам спасибо – ag0702

+0

Рад, что это помогло :-) – jabclab

Смежные вопросы