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