Запрос jQuery getJSON, возвращающийся пустым при действительном запросе - PullRequest
4 голосов
/ 15 марта 2010

Я пытаюсь получить JSON из сервиса Apple JSON iTunes. Запрос прост: http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/wsSearch?term=jac&limit=25

Если вы зайдете по URL в вашем браузере, вы увидите несколько хорошо сформированных (поддержанных jsonlint.com) JSON. Однако когда я использую следующий jQuery для выполнения запроса, запрос ничего не находит:

        $("#soundtrack").keypress(function(){
            $.getJSON("http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/wsSearch",{'term':$(this).val(), 'limit':'25'}, function(j){              
                var options = '';
                for (var i = 0; i < j.results.length; i++) {
                    options += '<option value="' + j.results[i].trackId + '">' + j.results[i].artistName + ' - ' + j.results[i].trackName + '</option>';
                }
                $("#track_id").html(options);
            });
        });

Firebug видит запрос, но получает только пустой ответ.

Здесь была бы признательна любая помощь, так как я со всей силы пытаюсь ее решить. Вы можете посмотреть скрипт здесь: http://rnmtest.co.uk/gd/drives_admin/add_drive (поле ввода звукового сопровождения находится внизу страницы).

Спасибо

Ответы [ 2 ]

7 голосов
/ 15 марта 2010

Или вы просто немного измените URL. Из

http://ax.phobos.apple.com.edgesuite.net/.../wa/wsSearch"

до

http://ax.phobos.apple.com.edgesuite.net/.../wa/wsSearch?callback=?"

И продолжайте использовать $.getJSON вместо переключения на $.ajax

Из документации jQuery.getJSON

Если URL содержит строку "callback=?" в URL, запрос вместо этого рассматривается JSONP .

4 голосов
/ 15 марта 2010

Для выполнения междоменных запросов вам нужно будет использовать JSONP. Это может помочь:

$.ajax({
  url: "http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStoreServices.woa/wa/wsSearch",
  dataType: 'jsonp',
  data: {'term':$(this).val(), 'limit':'25'}, 
  success: function(j){              
    var options = '';
    for (var i = 0; i < j.results.length; i++) {
      options += '<option value="' + j.results[i].trackId + '">' + j.results[i].artistName + ' - ' + j.results[i].trackName + '</option>';
    }
    $("#track_id").html(options);
  }
});
...