任何人都知道为什么这不起作用?
$(function(){
console.log('ready');
$.ajax({
dataType : 'jsonp',
jsonp : 'js',
url : 'http://monitor.302br.net/MonitorScoreServlet',
beforeSend : function(jqXHR, settings) {
console.info('in beforeSend');
console.log(jqXHR, settings);
},
error : function(jqXHR, textStatus, errorThrown) {
console.info('in error');
console.log(jqXHR, textStatus, errorThrown);
},
complete : function(jqXHR, textStatus) {
console.info('in complete');
console.log(jqXHR, textStatus);
},
success: function(data, textStatus, jqXHR){
console.info('in success');
console.log(data, textStatus, jqXHR);
}
});
});
直到最近才开始工作。 beforeSend处理程序永远不会触发,但你可以看到在firebug中进行的ajax调用,如果你去了url,它似乎返回了可接受的格式化结果(与之前相同的结果):
http://monitor.302br.net/MonitorScoreServlet?js=jsonp1298046640938
文本/ JavaScript的:
(84.3);
如果我注释掉了网址,那么beforeSend就会开火,但当然没有网址....
有什么想法吗?
答案 0 :(得分:0)
根据定义,AJAX请求仅限于您当前的域。因此,您无法从您的域中请求外部网址。
答案 1 :(得分:0)
好的,我感到愚蠢。这就是我认为发生的事情:服务器曾经被设置为将js param作为回调函数。所以一个网址如:
http://monitor.302br.net/MonitorScoreServlet?js=foo
会导致:
foo(84.1);
每当我们浏览浏览器时,我们只是看着:
http://monitor.302br.net/MonitorScoreServlet?js
导致:
(84.1);
我认为jQuery正在做一些魔术,把它变成可用的数据,但现在我认为jQuery正在创建类似的东西:
function jsonp1298047240882(data) {
// do something with data
}
因此,当我们改变后端代码而不是创建回调函数调用时,整个事情就停止了。 (但beforeSend
处理程序永远不会被调用,这仍然很奇怪。)