1

我有问题。我有一个表单提交,它使用 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 的技巧是什么???

4

2 回答 2

1

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

就像是

callback({ renderHTML = 'Successful'});

这通常应该在过滤器上加以注意。

于 2012-05-29T04:18:24.640 回答
0

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

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

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

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

希望有帮助。

于 2012-05-29T03:09:52.253 回答