【问题标题】:Why is my callback not working for JSONP data为什么我的回调不适用于 JSONP 数据
【发布时间】:2013-01-10 22:07:13
【问题描述】:

我无法获取以下数据的供稿。我知道我为 ajax 指定数据的方式有问题。以下是我尝试过的:

<script type="text/javascript">
        $(function() {
            $.ajax({
                type:'GET',
                dataType:'jsonp',
                url:'http://api.stackoverflow.com/1.0/tags/?callback=?',
                success:function(data) {
                    alert(data.tags[0].name.length)
                },
                error:function() {
                    alert("Sorry, I can't get the feed");   
                }
            })
        });
    </script>

我收到以下错误:

SyntaxError: 无效标签 [Break On This Error]

“总数”:31987,

根据 TJ,我只是得到一个原始 JSON 文件。现在,当我的服务器发送 JSON 请求时,我需要做什么。

【问题讨论】:

    标签: jquery ajax json web-services jsonp


    【解决方案1】:

    如果您查看对http://api.stackoverflow.com/1.0/tags/?callback=foo 的响应,您会发现它是 JSON,而不是 JSONP。根据api.stackoverflow.com的文档,需要添加jsonp查询参数才能得到JSONP:http://api.stackoverflow.com/1.0/tags/?jsonp=foo

    对于想要控制回调名称以获得最大可靠性的 jQuery,您可以使用 jsonp 选项告诉它该参数的名称应该是什么(并且不要将它放在 URL 中, jQuery 会这样做):

    $.ajax({
        type:'GET',
        dataType:'jsonp',
        jsonp: "jsonp",
        url:'http://api.stackoverflow.com/1.0/tags/',
        success:function(data) {
            alert(data.tags[0].name.length)
        },
        error:function() {
            alert("Sorry, I can't get the feed");   
        }
    });
    

    【讨论】:

    • 谢谢,实际上我已经为 stackoverflow 提要工作了,但是当我在来自不同站点的提要上使用它时,我仍然收到 Invalid label syntax 错误。如何让我的服务器返回编码的json数据。就像SO在上面所做的那样。下面还是不行。 $.ajax({ dataType: 'jsonp', jsonp:'jsonp', url: 'exampledoman.com/demos/file.json?jsonp=?', type : 'GET', 成功: function(data) { $.each(data["it... ...其余代码
    • @Mike:服务器必须明确支持 JSONP。您的示例 URL 看起来只是获取文件,没有服务器端处理,在这种情况下,它不能执行 JSONP,因为要(正确)执行 JSONP,您使用请求中指定的回调名称。 JSONP 的核心概念是:调用者说应该使用什么函数名,响应是theFunctionName(,然后是如果SOP 允许的其他情况下的JSON,然后是);——例如,改为实际的 JSON,它是 JavaScript,使用对象字面量进行函数调用。
    • 如何让我的服务器支持 JSONP。
    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 2011-12-22
    • 2022-09-23
    • 1970-01-01
    • 2012-09-26
    • 2011-01-25
    • 2021-05-21
    • 2020-08-31
    相关资源
    最近更新 更多