JQuery Ajax не удается при публикации данных из-за ключевого слова в данных публикации - PullRequest
1 голос
/ 05 августа 2009

Я знаю, почему сообщение терпит неудачу, но я не уверен, как решить это, и я не могу найти другие ссылки на это. Я делаю ссылки на jEditable, чтобы сделать это проще, как это происходит без плагина jEditable.

Так, как, черт возьми, я могу "убежать" от ключевого слова, чтобы оно правильно отправляло сообщения? Вот соответствующий код:

Тестовое задание

<script type="text/javascript">
$(function() {
    $('#button').click(function() {
        $.ajax({
            type : 'POST',
            url : 'ajax/post_cms.php',
            dataType : 'html',
            data : {
                id : '1',
                data : '<p>This is a test of the system that shows me an alert !</p>'
            },
            success : function(data) {
                console.log(data);
            },
            error : function(XMLHttpRequest, textStatus, errorThrown) {
                console.log('An Ajax error was thrown.');
                console.log(XMLHttpRequest);
                console.log(textStatus);
                console.log(errorThrown);
            }
        });
    });
});
</script>

<input type="button" name="button" value="button" id="button" />

Когда он выдает ошибку, он вызывает функцию обратного вызова error: и errorThrown записывается как неопределенное. Я уверен, что это слово «предупреждение», потому что если я произношу это слово «аллерг» в одном месте, оно появляется, все сообщения просто отлично. Если вы извлечете HTML (так что это просто «данные:« Это тест системы, которая показывает мне предупреждение! »), Он будет работать просто отлично.

XMLHttpRequest = "XMLHttpRequest readyState = 4 status = 0 multipart = false" textStatus = "ошибка" errorThrown = "undefined"

GAH !! HELP !!

Ответы [ 3 ]

3 голосов
/ 05 августа 2009

UPDATE : Проблема заключалась в том, что брандмауэр перехватывал запрос AJAX в качестве атаки XSS. Если у вас возникли проблемы, подобные тем, которые были показаны ниже, обязательно проверьте вашу среду.

Симптомы:

  1. Ошибка отправки данных с кодом ошибки 0
  2. Публикация данных работает в других местах, но не в вашей среде
  3. Публикация данных работает до тех пор, пока они не содержат функций JavaScript
  4. Ваша библиотека, похоже, не виновата, основываясь на документации
  5. Вы не можете найти ошибку в своей библиотеке.

Я думаю, что здесь что-то не так, кроме jQuery. Ваш первоначальный пример отлично работает для меня.

См. Рабочий пример здесь: http://jsbin.com/ifami

Примечание. Мне пришлось изменить URL-адрес ajax на действительный URL, но в остальном других изменений не было.

При этом вы можете попробовать закодировать свои значения как компоненты URI:

<script type="text/javascript">
$(function() {
        $('#button').click(function() {
                $.ajax({
                        type : 'POST',
                        url : 'ajax/post_cms.php',
                        dataType : 'html',
                        data : {
                                id : '1',
                                data : encodeURIComponent('<p>This is a test of the system that shows me an alert !</p>')
                        },
                        success : function(data) {
                                console.log(data);
                        },
                        error : function(XMLHttpRequest, textStatus, errorThrown) {
                                console.log('An Ajax error was thrown.');
                                console.log(XMLHttpRequest);
                                console.log(textStatus);
                                console.log(errorThrown);
                        }
                });
        });
});
</script>
0 голосов
/ 05 августа 2009

Я думаю, что, возможно, ваши данные: параметру нужен другой набор скобок, например:

 data : ({ id : '1',
           data : '<p>This is a test of the system that shows me an alert !</p>'
           }),
0 голосов
/ 05 августа 2009

Если это всего лишь слово alert, вы можете просто изменить его на что-то другое, например # 1234 #, а затем проанализировать его обратно. Это глупо, но библиотека, которая вылетает, если вы вводите «alert», звучит довольно забавно для меня.

Вы также можете зайти в код lib и исправить его ... или открыть тикет и заставить их исправить это. Мне кажется, это очень важный вопрос!

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