【问题标题】:Rendering JSONP in HTML format on Java Servlet response在 Java Servlet 响应上以 HTML 格式呈现 JSONP
【发布时间】:2012-05-29 12:18:24
【问题描述】:

我遇到了问题。我有一个表单提交,它使用 jQuery JSONP 对我的 servlet 进行调用。此代码嵌入在另一个域中,因此使用。

这是我的表单提交 AJAX:

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js' type='text/javascript'></script>
<script language='Javascript' type='text/javascript'>
$(\"#form1\").submit(function(event) {
    event.preventDefault();
    var $form = $(this),
        choice2 = $form.find( 'input[name=\"personChoice\"]' ).val(),
        url = $form.attr( 'action' ),
    $.ajax({
            data: {choice:choice2},
            url: url,
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'updatePage'
    });
});
function updatePage(renderHTML) { 
    alert(renderHTML);
}
</script>

我可以在我的 Java servlet 中确认 request.getParameter("callback") 填充了 updatePage。我需要做的是在 Java Servlet 中以 JSONP 格式发回响应。如何做到这一点?我现在有一些非常简单的事情:

Java Servlet 代码:

        response.setContentType("text/javascript");
        PrintWriter out = response.getWriter();

        String renderHTML = "{ renderHTML = 'Successful'}";

        out.println(renderHTML);

我还尝试了 JSON 内容类型响应,我的 javascript updatePage 中的警报没有被调用。

Java servlet 和响应 jsonpCallback 有什么技巧???

【问题讨论】:

    标签: java jquery servlets cross-domain jsonp


    【解决方案1】:

    必须将 JSONP 响应包装在带有回调的请求中指定的函数调用中。

    类似

    callback({ renderHTML = 'Successful'});
    

    这通常应该在过滤器中注意。

    【讨论】:

      【解决方案2】:

      jsonpCallback 属性不是你想象的那样。它是一个字符串(或返回字符串的函数),jquery 将其用作请求 URL 的一部分。如果您不需要该功能,可以将其设置为 falseSee the docs

      您应该使用“成功”属性来设置响应处理程序。 像这样的:

          $.ajax({
              data: {choice:choice2},
              url: url,
              dataType: 'jsonp',
              jsonp: 'callback',
              jsonpCallback: false,
              error: function(xhr, status, error) {
                  alert("error");
              },
              success: updatePage
              });
      

      此外,用于 JSONP 的最佳内容类型是 application/javascript

      希望对您有所帮助。

      【讨论】:

      • 感谢您的评论 - 我确实需要该回调字符串来触发半过滤器。我一直在阅读有关成功 ajax 属性的信息 - 让我尝试一下。
      • 嗯。这部分是缺乏经验,但是当我制作那个 jsonpCallback 时,我希望将该回调参数作为过滤器的“触发器”。当我看到一个回调参数(不管它是什么)时,我想将一些 JSON 响应返回给该回调方法(本例为 updatePage)。我可以通过该方法看到警报,因此我知道呼叫正在返回。我认为我现在遇到的问题是如何获取完整的 html 标记字符串并将其传递回响应以更新 div?我需要使用 Stringfy 吗?
      • 最后一条评论 - 该内容类型似乎解决了我遇到的一个问题。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2014-10-04
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多