由于帖子数据中的关键字而发布数据时,jQuery Ajax失败

时间:2009-08-05 16:38:22

标签: javascript jquery ajax

我知道帖子失败的原因,但我不知道如何解决它,我找不到任何其他的引用。我正在使用我们对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”记录为undefined。我很肯定它是“警报”这个词,因为如果我在它出现的一个地方拼写“allert”,那么一切都很好。如果您取出HTML(所以它只是“数据:'这是对系统的测试,向我显示警报!'”)它的工作正常。

XMLHttpRequest =“XMLHttpRequest readyState = 4 status = 0 multipart = false” textStatus =“错误” errorThrown =“undefined”

GAH !! HELP !!

3 个答案:

答案 0 :(得分:3)

<强>更新: 问题是防火墙将AJAX请求捕获为XSS攻击。如果您遇到类似于下面显示的问题,请务必检查您的环境。

症状:

  1. 发布数据失败,错误代码为0
  2. 发布数据可在其他地方使用,但不适用于您的环境
  3. 发布数据只要不包含任何javascript函数
  4. 就可以正常工作
  5. 根据文档
  6. ,您的图书馆似乎不应该出错
  7. 您无法在图书馆中找到错误。
  8. 我认为除了jQuery之外还有其他问题。 你的初始例子对我来说很好。

    请参阅此处的工作示例:http://jsbin.com/ifami

    注意:我必须将您的ajax网址更改为有效的网址,否则没有其他更改。

    话虽如此,您可以尝试将您的值编码为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>
    

答案 1 :(得分:0)

如果它只是单词alert,你可以简单地将其更改为其他内容,例如#1234#,然后再将其解析。这很糟糕,但是如果你输入“警报”,那么一个崩溃的图书馆对我来说非常时髦。

你也可以进入lib代码并修复它......或者打开一张票并让他们修复它。听起来这是一个非常重要的问题!

答案 2 :(得分:0)

我想也许你的数据:参数需要另一组括号,如下:

 data : ({ id : '1',
           data : '<p>This is a test of the system that shows me an alert !</p>'
           }),