jQuery的getJSON请求在有效请求时返回空值

4
我正在尝试从苹果的iTunes JSON服务中获取一些JSON。请求很简单: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

或者您可以稍微更改一下网址。从

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=?",则该请求将被视为JSONP


1
谢谢。但我相信每个人都知道其他函数只是在后台使用$.ajax。但是我更喜欢使用“简写”函数时的可读性提高。这样我就不需要扫描整个选项对象来了解发生了什么。 - jitter

4
为了进行跨域请求,您需要使用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);
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接