Мне нужно сделать SOAP-вызовы из javascript между разными доменами. На стороне сервера есть список разрешенных доменов, методов и заголовков, которые включены в ответ фильтром. Он работает хорошо (даже между разными доменами), когда код ответа равен 200, но когда на серверной стороне выбрано исключение, объект xhr имеет статус 0 вместо 500, а responseText пуст. При использовании в одном домене статус и responseText в порядке.jquery - Empty responseText в объекте XMLHttpRequest при возврате сервера 500
Соответствующий код выглядит следующим образом:
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
Спасибо за ваш ответ, но я боюсь, что это не будет работать (я пробовал). Из журналов видно, что сервер отвечает 500, и я также вижу это в firebug. Это просто, что фактический ответ (т. Е. Исключение) где-то теряется. Тем временем я построил простой javascript с собственными вызовами (без участия jquery) и получил те же результаты. Похоже, что в случае совместного использования ресурсов перекрестного браузера браузер не перенаправляет ответ, если статус отличается от 200. Я нашел статью об этой проблеме, когда клиент реализован в flex. – Tibor
http://blog.widget-labs.com/2007/02/15/handling-web-service-exception-in-flex-code/ – Tibor
Я знаю, что это не тот же язык/случай, но, возможно, корень проблема такая же. – Tibor