帮助调试ajax问题

时间:2011-02-18 16:35:38

标签: ajax debugging

任何人都知道为什么这不起作用?

$(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就会开火,但当然没有网址....

有什么想法吗?

2 个答案:

答案 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处理程序永远不会被调用,这仍然很奇怪。)