如何将我生成的JSP包装在JSONP包装器中?

时间:2010-06-22 16:18:21

标签: jsp jsonp

我有一个JSP页面,它呈现一个HTML块。在正常使用中,我使用AJAX(具体地,使用jQuery.load())加载JSP的内容并将其插入到页面中。现在,我需要能够将这个HTML块加载到不同的域中,这意味着相同的源限制将不允许我使用“普通”的AJAX。

此块包含在多个位置,其中一些位于同一个域中,其中一些位于备用域中。我希望它继续按照当前的工作方式工作,除非传递一个特定的参数(很可能,这将是为JSONP支持传递的回调函数)。

我的概念解决方案(到目前为止)是输出JSONP,只有一个KEY / VALUE对,具有完整的HTML输出作为VALUE。

问题:当JSP完成渲染并修改它时,我找不到任何方法来获取等待发送的缓冲输出(在这种情况下,用“\ n”替换实际的新行。 ,当我的JSONP函数遇到第一个新行时,我收到Unterminated String Literal错误。

实施例

<%@page contentType="text/html"%>
<%
    String callback = request.getParameter("callback");
%>
<% if(callback != null) { %>
    // JSONP Function call, defining Key/Value Pair
    // New lines break because JavaScript strings cannot cross lines
    <%= callback %>({"key":'
<% } %>

<div id="my_content">
    ...
</div>

<% if(callback != null) { %>
    '}) // End of JSONP Function Call
<% } %>

1 个答案:

答案 0 :(得分:2)

JSON Taglib library应该做你需要的。我自己没有使用它,但这是解决问题的正确方法,如下所示:

<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>

<json:object>
<json:property name="key">

<div id="my_content">
    ...
</div>

</json:property>
</json:object>

您可能必须自己将JSONP括号括在结果周围。