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

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

response.setContentType("application/javascript");

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

【问题讨论】:

  • 我看到了那个答案,但我更具体地询问我是否需要做其他任何事情才能在另一端正确访问它。

标签: jsp 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的代码,结果和你的一样吗?" - 你不应该问一个问题就能得到一个好的答案。我建议您确定这是正确的答案,并有信心这样说。
猜你喜欢
  • 2012-02-15
  • 2014-12-16
  • 2017-05-04
  • 2022-01-01
  • 1970-01-01
  • 2014-07-11
  • 2016-02-16
  • 1970-01-01
相关资源
最近更新 更多