jquery - Пустой responseText в объекте XMLHttpRequest, когда сервер возвращает 500 - PullRequest
1 голос
/ 14 октября 2010

Я должен сделать SOAP-вызовы из javascript между разными доменами. На стороне сервера есть список разрешенных доменов, методов и заголовков, которые включаются в ответ фильтром. Он работает хорошо (даже между разными доменами), когда код ответа равен 200, но когда на стороне сервера генерируется исключение, объект xhr имеет статус 0 вместо 500, а responseText пуст. При использовании на одном домене статус и текст ответа в порядке.

Соответствующий код выглядит следующим образом:

function onError(xhr, status, thrownError) {
    alert(xhr.status);
    alert(xhr.responseText);   
}

$.ajax({
    type: "POST",
    url: SOAPClient.Proxy,
    dataType: "xml",
    processData: false,
    data: content,
    context: context,
    contentType : SOAPClient.ContentType + "; " + SOAPClient.CharSet,
    error: onError,
    success: onSuccess,
    complete: onComplete,
    beforeSend: function(req) {
        req.setRequestHeader("Method", "POST");
        req.setRequestHeader("Content-Length", SOAPClient.ContentLength);
        req.setRequestHeader("SOAPServer", SOAPClient.SOAPServer);
        req.setRequestHeader("SOAPAction", soapReq.Action);
    }
});

Я использую jQuery-1.4.2. Разрешенные заголовки: «SOAPServer», «SOAPAction» и «Method». Я пробовал это в FF 3.6.10 и Google Chrome 7.0.517.36

1 Ответ

0 голосов
/ 15 октября 2010

FF 3.6.8 возвращает xhr.status === 0, когда сервер отвечает HTTP-кодом, если 301. Исправление требует изменения функции httpSuccess $ .ajax

Чтобы исправить это, я изменил httpSuccess в jQuery 1.4.2.

оригинал:

httpSuccess: function( xhr ) {
    try {
        // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
        return !xhr.status && location.protocol === "file:" ||
            // Opera returns 0 when status is 304
            ( xhr.status >= 200 && xhr.status < 300 ) ||
            xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
    } catch(e) {}

    return false;
},

изменение:

httpSuccess: function( xhr ) {
    try {
        // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
        return !xhr.status && location.protocol === "file:" ||
            // Opera returns 0 when status is 304
            ( xhr.status >= 200 && xhr.status < 300 ) ||
            xhr.status === 304 || xhr.status === 1223 ||
            ( xhr.status === 0 && xhr.statusText.toUpperCase() === 'OK');            
    } catch(e) {}

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