jQuery getJSON 请求在有效请求上返回空

Posted

技术标签:

【中文标题】jQuery getJSON 请求在有效请求上返回空【英文标题】:jQuery getJSON request returning empty on a valid request 【发布时间】:2011-01-27 15:00:46 【问题描述】:

我正在尝试从 Apple 的 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(原声输入框在页面底部)。

谢谢

【问题讨论】:

【参考方案1】:

或者您只需稍微更改一下网址。来自

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

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

并继续使用$.getJSON,而不是切换到$.ajax

来自jQuery.getJSON documentation

如果 URL 包含字符串 URL中的"callback=?",请求 被视为 JSONP

【讨论】:

谢谢。但我相信每个人都知道其他功能只是在背景中使用$.ajax。但我更喜欢使用“速记”功能时提高的可读性。这样我就不需要扫描整个选项对象来了解发生了什么。【参考方案2】:

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

【讨论】:

以上是关于jQuery getJSON 请求在有效请求上返回空的主要内容,如果未能解决你的问题,请参考以下文章

jQuery getJSON 回调不起作用 - 即使使用有效的 JSON - 并且似乎使用的是“OPTION”请求而不是“GET”

jQuery中的getJSON方法的url参数中,为啥加上callback=

关于Jquery的 $.getJSON()函数

jQuery的get()post()getJson()方法

$.getJSON的同步与异步请求

jQuery异步请求(如getJSON)跨域解决方案