我遇到了问题。我有一个表单提交,它使用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
。
希望有帮助。