从 JSP 返回 JSONP 而不是 JSON

Posted

技术标签:

【中文标题】从 JSP 返回 JSONP 而不是 JSON【英文标题】:Returning JSONP instead of JSON from a JSP 【发布时间】:2012-12-09 05:24:31 【问题描述】:

我发现this question 将响应类型从 jsp 设置为 json,但我需要将响应类型设置为 jsonp 以进行跨域访问。还会是这样吗:

response.setContentType("application/javascript");

只需将来自 jsp 的响应包装在 callbackfunction( + content + ) 中,还是需要做更多的事情?

【问题讨论】:

Best content type to serve JSONP?的可能重复 我看到了那个答案,但我更具体地询问我是否需要做其他任何事情才能在另一端正确访问它。 【参考方案1】:

我最近不得不这样做。在服务器端我有这样的东西:

string callbackName = queryMap['callback']; //jquery will pass in some name in our .getJSON call below
string jsonData = getJsonData();
string jsonp = callbackName + "(" + jsonData + ")";

response.SetContentType('application/javascript');
response.Send( jsonp );

在 javascript 中是这样的:

var url = getUrl() + "?callback=?";
$.getJSON(url,function(onSuccessData) alert(onSuccessData); );

【讨论】:

谢谢,我们正在做一些与此基本相同的事情。【参考方案2】:

要在 javascript 中支持跨域访问,您可以使用 $.support.cors = true; 除此之外,您可以将 content-type 设置为 application/javascript for jsonp。

【讨论】:

我在发布后找到了应用程序/javascript 的答案,谢谢。我的问题实际上是针对如何创建 JSP 以使其返回正确的 jsonp 数据。应该用 callbackfunction + '(' + content + ')' 还是什么格式?【参考方案3】:

jsp:

 String str = "\"appNo\":\"" + "2" + .....+ "\"";
    String json = "m1(" + str + ")";
    response.getWriter().write(json);

html:

 $.ajax(
          type: 'GET',    
          url: url,
          dataType: "jsonp",
          crossDomain: true,          
          cache:false,
           jsonp:"callback",
          success: function(data)  ....
   );

这是我的jsp代码

【讨论】:

"这是我的jsp的代码,结果和你的一样吗?" - 你不应该问一个问题就能得到一个好的答案。我建议您确定这是正确的答案,并有信心这样说。

以上是关于从 JSP 返回 JSONP 而不是 JSON的主要内容,如果未能解决你的问题,请参考以下文章

返回 XML 时使用 JSONP

发送 JSONP 与 JSON 数据?

如何反序列化 JSONP 响应(最好使用 JsonTextReader 而不是字符串)?

如何反序列化 JSONP 响应(最好使用 JsonTextReader 而不是字符串)?

php返回json,xml,JSONP等格式的数据

没有 JSONP 的 getJSON 远程请求 - 服务器