【问题标题】:Displaying jsonp data on web page在网页上显示 jsonp 数据
【发布时间】:2013-04-05 22:59:34
【问题描述】:

我正在尝试使用 jsonp 显示数据,但由于某种原因它不想显示在网页上。

function test() 
{
    $.ajax(
    {
        url: "http://localhost/api/company",  //web api is hosted on iss 8
        dataType: 'jsonp',
        success: function (data) 
        {
            $("#test").append(data[5].Company);
        }
    });
}

请注意从服务器返回的数据就好了。我通过谷歌浏览器执行测试功能并检查网络选项卡中的响应来测试这一点。

我在这里做错了什么?

【问题讨论】:

  • JSON 是什么样的?
  • 你的意思是回复吗?
  • 是的。它的结构是什么?你的数组中肯定有至少 6 个元素吗?另外,您的代码是否到达append 行?
  • 嗨,李,响应是 XML,是的,它确实有 6 个元素。
  • XML?它不是JSON格式的吗?请出示样本。

标签: jquery json asp.net-web-api jsonp


【解决方案1】:

我建议您在这里阅读 JSON 和 JSON with Padding (JSONP) 之间的一个很好的解释,以便更好地理解发生了什么: Can anyone explain what JSONP is, in layman terms?

首先是您的调用需要支持 JSONP 的 URL。并非所有的 web 服务、rest 接口等都支持它即使它们生成 JSON

其次,您需要在 URL 中包含 ?callback=?,以便使用 jquery 中的 JSONP。

你添加 ?callback=?到您的网址,例如:

var url = 'URL?callback=?';
  $.getJSON(url, function(jsonp){
    $("#jsonp-response").html(JSON.stringify(jsonp, null, 2));
  });

您还需要测试实际服务是否支持 JSONP,您可以在浏览器中打开您的网络服务并添加 ?callback=something

http://localhost/api/company?callback=callbackID

如果 API 支持 jsonp,您应该在浏览器中看到如下输出:

callbackID({
    JSON DOCUMENT HERE
});

在下一部分中,我将包含一些链接,以展示什么是标准 JSON 响应以及什么是 JSONP 响应。

使用 Twitter API 的实时示例

当您使用 getJson 发送请求并有 ?callback=? jquery 自动添加回调 id。

网络服务器收到一个请求,例如并用回调名称(本例为“a”)包装数据:

http://search.twitter.com/search.json?since_id=91770779645124609&q=test&callback=a

如果您在没有回调的情况下尝试相同的请求,您只会看到无法跨站点使用的 JSON:

http://search.twitter.com/search.json?since_id=91770779645124609&q=test

【讨论】:

  • 嗨 Meewok 感谢重播。你知道我怎样才能包含回调吗?
  • 我相信 Web 服务已配置为在返回数据时接受 JSONP 请求(响应可以在网络选项卡中看到)。
  • 我已更新回复以回答您的问题。如果 web 服务支持 JSONP,当您通过浏览器访问时,输出应该会发生变化,并将 ?callback= 添加到 URL。如果你愿意,你也可以提供网络服务 URL,我可以看看。
  • 现在 web api 被这样调用 localhost/api/company/… 并且它返回一个错误的 400 错误请求。这是否意味着 web api 未配置为接受 Jsonp?
  • 您实际上只会看到 JSON 作为输出,没有回调。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2015-10-05
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多