【问题标题】:$.getJSON to get JSONP data$.getJSON 获取 JSONP 数据
【发布时间】:2010-07-14 12:01:37
【问题描述】:

我正在通过以下方式使用 $.getJSON 来接收警报但没有运气。

这是代码,

<script type="text/javascript">
    $(document).ready(function() {
        var url = "ticker.js?callback=?";
        $.getJSON(url, function(data) {
            alert(data.price);
        });

    });
</script>

而ticker.js文件只有下面这行

{ticket:'IBM',price:14.57}

它应该收到警报“14.57”,但我没有收到警报。

如果你想看到它的实际效果,你可以试试这个链接, http://nazmulweb.com/site5/demo/jsonPtest/

【问题讨论】:

    标签: jquery


    【解决方案1】:

    如果是本地文件,则应删除 ?callback=? 部分,如下所示:

    var url = "ticker.js";
    $.getJSON(url, function(data) {
       alert(data.price);
    });
    

    如果您查看the $.getJSON() docs,就会发现:

    如果 URL 在 URL 中包含字符串 "callback=?",则请求将被视为 JSONP。有关详细信息,请参阅 $.ajax() 中对 jsonp 数据类型的讨论。

    使用 JSONP,它在响应中期待randomFunctioName({ticket:'IBM',price:14.57});,而不是只是 JSON,而是一个函数调用...这就是 JSONP 通过成为&lt;script&gt; 标签跨域工作的方式。由于您只需要 JSON 并从 本地 源对其进行处理,因此请删除 callback=? 部分。

    编辑: 我完全错过了第二个问题,您当前的 JSON 无效并且将无法通过 1.4 中添加的 jQuery 的检查。它必须是这样的:

    { "ticket": "IBM", "price": 14.57 }
    

    您可以在这里测试您的 JSON 的有效性:http://www.jsonlint.com/

    【讨论】:

    • 文件在同一个域中。
    • @Hoque - 对...这就是我的观点,它 不是 JSONP 这是callback=? 指示它的内容,所以只要把它关掉就可以了一切就绪:)
    • 即使删除“callback=?”,我也没有收到警报。
    • 一开始我试图在同一个域中测试它,但我计划在不同的域中进行测试。但是我的第一次尝试没有成功。
    • @Hoque - 还有第二部分,这不是有效的 JSON :) 它必须是 { "ticket": "IBM", "price": 14.57 },我会更新答案。
    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2018-09-25
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多