помочь отладить проблему AJAX - PullRequest
0 голосов
/ 18 февраля 2011

Кто-нибудь знает, почему это не работает?

$(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 никогда не срабатывает, но вы можете видеть, что ajax-вызов выполняется в firebug, и если вы переходите к URL-адресу, он возвращает приемлемо отформатированные результаты (те же, что и раньше):

http://monitor.302br.net/MonitorScoreServlet?js=jsonp1298046640938
текст / JavaScript:

(84.3);

Если я закомментирую URL-адрес, сработает beforeSend, но, конечно, URL-адреса нет ....

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Хорошо, я чувствую себя глупо.Вот что, я думаю, произошло: сервер должен был быть настроен для принятия параметра js в качестве функции обратного вызова.Таким образом, URL-адрес, такой как:

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 никогда не вызывается.)

0 голосов
/ 18 февраля 2011

AJAX-запросы по определению ограничены вашим текущим доменом. Поэтому вы не можете запросить внешний URL-адрес из своего домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...