2009-06-05 8 views
7

Мне нужно сделать синхронный запрос к API last.fm, но когда я использую GET и json вместе, запрос становится асинхронным.синхронный запрос jquery json

мой код:

$.ajax({ 
     async: false, 
    dataType: "json", 
    url: "http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist="+artist+"&api_key="+apiKey+"&format=json&callback=?", 
    success: function(html){ 
      imgURL = html.images.image[1].sizes.size[0]["#text"]; 
    } 
}); 

Если удалить DATATYPE: "" или JSON использовать POST, это синхронное снова, но я зависит от использования как JSON и GET.

Любые идеи?

ответ

13

Ах, это потому, что вы пытаетесь выполнять междоменные запросы, а запросы междоменного запроса полагаются на тег динамического скрипта, который никогда не может быть синхронным, должен использовать тип данных json и метод GET.

Если вы выполните POST или удалите тип данных, вы получите ошибку доступа из-за политики same-origin. Он немедленно вернется, но как неудача.

+0

Хммм, думаю, мне придется найти другой путь, тогда ... спасибо за ответ в любом случае. – 2009-06-05 11:23:32

+0

Может ли он привести строку JSON обратно в текст и проанализировать строку JSON самому объекту в своей функции success() с помощью json2.js с сайта www.json.org? –

+0

@ Lunchy Не с чем-то справиться с перенаправлением запроса на его стороне. Единственный способ получить данные из другого домена - использовать тег сценария и функцию обратного вызова. Очевидно, что сервис ориентирован именно на это, указав функцию обратного вызова как URL-адрес. Вы можете имитировать блокировку, но только с использованием Javascript 1.7. http://hyperstruct.net/2008/5/17/synchronous-invocation-in-javascript-part-1-problem-and-basic-solution http://www.neilmix.com/2007/02/07/threading -в-Javascript-17 / – cgp

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