Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax问题(可能是由于组件字符)_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Ajax问题(可能是由于组件字符)

Javascript Ajax问题(可能是由于组件字符),javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个表单,它有一个文本区域,用户可以在其中输入数据,然后通过ajax将表单提交到同一页面,然后在该页面上进行处理 每隔一段时间,用户就会输入一些会抛出ajax错误的数据 我剥离了所有其他表单字段,并将其缩小到导致问题的文本区域,但我无法找出原因 我构建了一个示例页面,我一直在运行该页面来调试问题,但我不知道为什么会出现问题 我试图制作小提琴,但遇到了一些问题: 以下是指向测试页面的链接: 以下是测试页面breaked.php的代码: <?php if (!$_POST) { ?>

我有一个表单,它有一个文本区域,用户可以在其中输入数据,然后通过ajax将表单提交到同一页面,然后在该页面上进行处理

每隔一段时间,用户就会输入一些会抛出ajax错误的数据

我剥离了所有其他表单字段,并将其缩小到导致问题的文本区域,但我无法找出原因

我构建了一个示例页面,我一直在运行该页面来调试问题,但我不知道为什么会出现问题

我试图制作小提琴,但遇到了一些问题:

以下是指向测试页面的链接:

以下是测试页面breaked.php的代码:

<?php
if (!$_POST) { ?>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  <script type="text/javascript">
    function submitEncodeURI() {

      //including other form data that I stripped away
      var dataString = 'formid=completeActivity&submit=submit&uid=5435716e20463&notificationcounter=0';

      //grab and encode the textarea text
      var txtValue = encodeURIComponent($('#test_textarea').val());

      //add the textarea text to my string
      dataString += '&dispo='+txtValue;

      //submit the data to itself
      $.ajax({
        type: "POST",
        url: 'broken.php',
        data: dataString,
        success: function(returnData) {
          $('#encodedTextArea').html(returnData);
        },
        error: function() {
          alert('Failed');
        }
      });
    }
  </script>
  <p><strong>Sample Failing Text:</strong><br /><br />
    test please ignore 5105 = 33 5128 = 12 5325 = 19 6790 = 8 6791 = 4 6792 = 8 7125 = 20 7141 = 1
  </p>
  <textarea id="test_textarea" style="width: 300px; height: 300px;"></textarea><input type="button" value="Submit" onClick="submitEncodeURI();">
  <br />
  <strong>Submitted Text:</strong><br />
  <div id="encodedTextArea"></div>
<?php
}
else {
  echo $_POST['dispo'];
}
?>
什么不起作用

当我进入时: 测试请忽略5105=33 5128=12 5325=19 6790=8 6791=4 6792=8 7125=20 7141=1 在文本区域中,ajax将由于500内部服务器错误而失败

什么有效

当我将最后一个字符更改为除1以外的任何字符时,它都会起作用

示例:测试请忽略5105=33 5128=12 5325=19 6790=8 6791=4 6792=8 7125=20 7141=2

为什么突然改变最后一个字符会让ajax工作?为什么它首先返回500个内部服务器错误


我认为这与编码器的某些组合有关。

经过几个小时后,我终于找到了答案

这就是为什么在测试示例文本测试时,请忽略5105=33 5128=12 5325=19 6790=8 6791=4 6792=8 7125=20 7141=1在其他服务器上它可能会工作,而在我的服务器上测试时它不会工作

我的服务器有很多保护措施,可以防止sql注入攻击。如果它检测到任何形式的攻击,就会将请求抛出服务器

如果您查看我试图发送的字符串,它的开头有ignore,字符串的最后一个字符是7141=1

我的服务器在字符串7141=1中检测或忽略和1=1。当我的服务器检测到字符串或1=1中的任何位置时,它会将此识别为可能的sql注入攻击,并终止对服务器的请求

这就是为什么测试请忽略5105=33 5128=12 5325=19 6790=8 6791=4 6792=8 7125=20 7141=2会起作用,因为它不再找到或1=1


这个小问题花费了我好几个小时…

我不确定,但是使用ajax,您可以使用以下格式发送数据:{var_one:value,var_two:value}试试这个,在PHP或服务器端,您可以使用$u POST[var_one]获取数据,这可能有助于您检查服务器日志,了解发生错误的更多信息。错误日志将告诉您实际发生的情况。在“我的服务器正在工作”中,在echo$\u POST['dispo']之间放置一个try catch;感谢您抽出时间来调查此事!我尝试了另一种提交ajax的方式,结果没有任何差别。我的错误日志中没有显示任何关于这个问题的信息:我尝试添加了try/catch,但是,它从来没有返回到服务器,因为它在ajax中爆炸了,因为它由于某种原因在提交时找不到页面,最后是1,What Dos Work仍然提交得很好