我遇到了问题。我有一个表单提交,它使用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上的响应是什么?
答案 0 :(得分:1)
JSONP响应必须包含在函数调用中,该函数调用在带有回调的请求中指定。
像
这样的东西callback({ renderHTML = 'Successful'});
通常应该在过滤器上注意这一点。
答案 1 :(得分:0)
jsonpCallback属性不是您认为的那样。它是一个字符串(或返回字符串的函数),jquery将其用作请求URL的一部分。如果您不需要该功能,可以将其设置为false
。 See the docs
您应该使用'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
。
希望有所帮助。