如何使用jquery lib通过Ajax跨域调用拦截HTML响应

时间:2012-01-11 08:39:41

标签: jquery jsonp

我有一个登录表单,它调用外部控制器页面,返回带有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响应?

1 个答案:

答案 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响应。