JQuery AJAX сбой по неизвестной причине - PullRequest
1 голос
/ 01 апреля 2011

Я вызываю функцию, подобную этой:

function(activeOnly, callback) {
    debug("$.support.cors: {0}".format($.support.cors));
    debug("getting data({0})".format(activeOnly));
    debug("{0}/data/".format(this._api_root));
    $.ajax({
        url: "{0}/data/".format(this._api_root),
        data: {
            generaldata: !activeOnly
        },
        dataType: "json",
        headers: {
            authorization: this._auth_header
        },
        success: function (data, code, jqx) {
            debug("data request succeeded with {0}".format(data));
            result = data;
        },
        error: function(jqx, err, ex) {
            debug("data request failed with {0}: {1}".format(err, ex));                 
        },
        complete: function(jqx, status) {
            debug("data request completed: {0}".format(status));                    
        }
    });

В ответ вызываются функции error и complete с полученным результатом:

[6192] MyData: $.support.cors: true
[6192] MyData: getting data({0})
[6192] MyData: https://_some_root_/data/
[6192] MyData: data request failed with Unknown: Unknown
[6192] MyData: data request completed: Unknown

Когда я слежу за Чарльзом, я получаю следующее:

https://_some_root_/
Failed
No request was made. Possibly the certificate was rejected.
-
HTTP/1.0
CONNECT
-
/127.0.0.1
_some_root_/_some_ip_address_

3/31/11 3:15:28 PM
-
-
-
-
-
-
-
0.02 KB/s
-

366 bytes
-
-
-
366 bytes
-
-

и на вкладке запроса я вижу, что мой запрос даже выглядит неправильно (обратите внимание на отсутствие заголовка авторизации):

CONNECT _some_root_:443 HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0)
Host: _some_root_:443
Content-Length: 0
Proxy-Connection: Keep-Alive
Pragma: no-cache

Что дает? Нераспознанный сертификат или что-то в этом роде не запрашивается - просто происходит сбой. (Это нормально работает, если я сделаю запрос GET в моем браузере).

1 Ответ

2 голосов
/ 01 апреля 2011

Это, похоже, известная ошибка

  1. Согласно репортеру, обходной путь / взлом состоит в том, чтобы изменить источник jQuery с

    jQuery.support.cors = testXHR && ( "withCredentials" in testXHR );
    

    до

    jQuery.support.cors = true; 
    
  2. Комментарий к ошибке содержит следующее:

    Спасибо за сообщение об ошибке, но это не ошибка jQuery. Windows 7 Гаджеты не поддерживается платформой jQuery. транспортирует слой нового AJAX подключаемый, поэтому вы должны просто включить пользовательский транспорт, который игнорирует нормальный междоменная поддержка (или использует XDomainRequest).

  3. ... и

    Или, проще говоря, установите для jQuery.support.cors значение true в вашем скрипте без взлома jQuery;)

...