Ошибка обратного вызова каждый раз при попытке POST XML с использованием jQuery в браузерах не IE - PullRequest
1 голос
/ 01 марта 2010

Я пытаюсь связаться с сервисом проверки правописания Google, используя jQuery. Служба Google требует, чтобы вы опубликовали XML, а он, в свою очередь, вернет XML-ответ. В IE обратный вызов успеха срабатывает каждый раз, но в браузерах, отличных от IE (протестировано в Firefox и Chrome), обратный вызов ошибки срабатывает каждый раз.

Самая большая разница в том, как создается публикуемый XML. Для IE создается объект ActiveX; для всех остальных браузеров используется DOMParser (пример из w3schools ).

Ниже приведен мой тестовый код (ПРИМЕЧАНИЕ: проверка орфографии представляет собой идентификатор кнопки HTML.) Что мне не хватает или нужно изменить, чтобы успешно публиковать XML из jQuery в разных браузерах?

<script type="text/javascript">

var xmlString = '<?xml version="1.0"?><spellrequest><text>mispell</text></spellrequest>';

function createXMLDocument(s) {
    var xmlDoc;
    if (window.DOMParser) {
        var parser = new DOMParser();
        xmlDoc = parser.parseFromString(s, 'text/xml');
    } else {
        xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
        xmlDoc.async = 'false';
        xmlDoc.loadXML(s);
    }
    return xmlDoc;
}

$(function() {
    $('#spell-check').live('click', function(e) {
        e.preventDefault();
        $.ajax({
            cache: false,
            contentType: 'text/xml',
            data: createXMLDocument(xmlString),
            dataType: 'xml',
            processData: false,
            type: 'POST',
            url: 'https://www.google.com/tbproxy/spell?lang=en',
            success: function(data, textStatus, XMLHttpRequest) {
                alert(textStatus);
                //debugger;
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert(textStatus);
                //debugger;
            }
        });
    });
});

1 Ответ

1 голос
/ 01 марта 2010

Дом парсер задыхается на <?xml version="1.0"?> части .. Удалите его, и оно должно работать нормально.

[править]

Теперь, когда мы исправили ошибку синтаксического анализатора, давайте посмотрим на вызов ajax ..

Вам необходимо преобразовать объект xml в строку перед отправкой через POST. Это означает, что вы должны отправлять непосредственно строку xml, не анализируя ее вначале (, если вам больше ничего не нужно делать с xml ) .. не забудьте сначала удалить ее ..

измените data: createXMLDocument(xmlString), на data: escape(xmlString), и попробуйте еще раз ..

[редактировать 2]

Только что заметил ... вы не можете делать ajax-вызовы между доменами ( это небезопасно ), если они не являются JSONP .. вы можете общаться только со своим собственным доменом .. обходной путь создать серверную страницу (asp / php и т. д.), которая будет выполнять междоменный вызов и возвращать результаты в ваш собственный вызов javascript.

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