我有一个登录表单,它调用外部控制器页面,返回带有TRUE或FALSE消息的HTML页面。我写了这个jQuery函数:
$("#login").click(function(){
$.ajax({
dataType: 'jsonp',
data: $('#form_login').serialize(),
jsonp: 'jsonp_callback',
url: "http://news.univadis.it/autenticazione/autentication.asp",
complete: function(data, textStatus, XMLHttpRequest){
$("#output").html(data);
}
});
});
但是当我尝试将消息标记为“TRUE”或“FALSE”时,Firebug会返回此错误:
XML tag name mismatch (expected meta) </head>
这是因为响应是在HTML中而不是在Json中,我如何拦截HTML响应?
答案 0 :(得分:0)
不,它不会起作用。
JSONP实际上是一个黑客攻击,当您使用JSONP请求请求跨域资源时,jQuery库会使用您提供的URL将<script/>
节点插入HTML文档的头部。
因此,从您的AJAX请求中将创建以下脚本节点:
<script type="text/javascript" src="http://news.univadis.it/autenticazione/autentication.asp?jsonp_callback=jQuery17108946618142072111_1326271422070&_=1326271651101"/>
当然实际参数会有所不同,但看起来会像这样。 Web服务器应该发送准备好的JavaScript响应。准备好的响应意味着实际的响应应该用JavaScript函数调用包装,在这个例子中:
jQuery17108946618142072111_1326271422070('this is your data');
如果没有这个回调,你将永远得不到你的回复。
这就是为什么你不能用JSONP请求“拦截”HTML响应。