在 Java Servlet 响应上以 HTML 格式呈现 JSONP



我遇到了问题。我有一个表单提交,它使用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上返回响应???

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

类似的东西

callback({ renderHTML = 'Successful'});

这通常应该在过滤器上小心。

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

应使用"success"属性来设置响应处理程序。像这样:

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

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

希望有帮助。

相关内容

  • 没有找到相关文章

最新更新