【问题标题】:Sending JSONP vs. JSON data?发送 JSONP 与 JSON 数据?
【发布时间】:2011-06-08 15:51:29
【问题描述】:

我正在制作一个需要以 JSONP 格式返回数据的 Web 服务。我正在为 JSP 使用 JSON taglib,我认为所有必须添加的只是括号,但我找不到一个很好的资源来验证这一点。

例如,曾经使用此函数返回的 Web 服务函数:

private static String getJSONPObject(String s) throws JSONException {
    return "(" + new JSONObject(s) + ")";
}

这对吗?

谢谢!

【问题讨论】:

    标签: java web-services json jsonp


    【解决方案1】:

    JSONP 只是一种允许 Web 应用程序跨域检索数据的 hack。可以说违反了Same Origin Policy (SOP)。它的工作方式是使用 Javascript 将“脚本”元素插入您的页面。因此,您需要一个回调函数。如果您没有,您的 Javascript 将无法访问 JSON 对象。但是通过使用 JSONP,您的 Javascript 代码可以调用回调函数。

    所以你必须指定回调名称。所以你的函数可能看起来像这样:

    private static String getJSONPObject(String callback, String s) throws JSONException {
        return callback + "(" + new JSONObject(s) + ")";
    }
    

    【讨论】:

    • 您应该有权访问 http 请求对象或至少以某种方式访问​​已发送的回调,通常采用以下形式:example.com?callback=name123
    • 是的,为了扩展 Abdullah 的观点,您的 Javascript 代码应该调用函数“name123”来获取 JSON。
    • 啊,谢谢,我现在明白回调了。但是,我不确定如何在 Web 服务中检索它。我可以在我的函数中要求它作为参数,但这似乎不像 Abdullah 举例说明的那样能够在链接中解析它那样用户友好。具体来说,这是在类中使用的,Web 服务允许访问这些方法。请求对象可以在类内部使用吗?
    • example.com?callback=name123 将调用您的 JSP servlet,后者又调用函数“getJSONPObject”并将“name123”作为“回调”参数传递。
    【解决方案2】:

    我添加了一个示例来使用 Jquery 和 Servlet 或 JAX-WS webservice 解决跨域 JSONP(带填充的 Json)。

    请查看这篇文章。
    http://reddymails.blogspot.com/2012/05/solving-cross-domain-problem-using.html

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 2013-02-14
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2014-01-21
      • 2013-09-05
      相关资源
      最近更新 更多