我做了一个ajax调用,用于检查用户名的可用性或验证密码等。
ajax部分:
$('#usernameinput').on('keyup change', function() {
$.ajax({
type:'POST',
url:"formchk.php",
data: $("#registform").serialize(),
dataType:"html",
success: function(result){
$('#span').html(result)
}} )});
php部分:
include("connect.php");
$username = mysql_real_escape_string($_POST['username']);
$stm = $bgln->query("SELECT * FROM membrs where username='$username'");
$row_cntusername = $stm->num_rows;
if( strlen(mysql_real_escape_string($_POST['username'])) > 20) {
echo "<a id=\"error\">something something </a>";
$stm->close();
}
elseif($row_cntusername > 0){
echo "<a id=\"error\">In use</a>";
$stm->close(); }
//and other checkings goes on...
我搜索了很多,但无法弄清楚,这里有什么问题。这适用于chrome和FF,但不适用于IE。
注意:
jquery库是jquery-2.1.0.min.js。
IE版本为11。
修改
我尝试使用$_GET
而不是$_POST
。有效!但这不是解决方案,我也使用这些代码来插入和更新数据。而且我相信如果在向数据库插入和/或更新数据时使用$ _POST会更好。
EDIT2
我在php部分添加了这个;
if (count($_POST) == 0) {
die('No posted data received');
}
我将通话结果称为“未收到过帐的数据”
我尝试了javascript部分;
document.write($("#registform").serialize())
它给出了在输入中写入的值。所以,问题是ajax不能将数据发布到php文件,但是从php得到“没有发布数据”的结果。
我还添加了
cache: false,
如果它是IE的缓存问题,但它也不起作用。
答案 0 :(得分:0)
您需要对POST数据进行更多验证:
include("connect.php");
if (count($_POST) == 0) {
die('No posted data received');
}
$fields = array('username', 'kadi', ...);
foreach ($fields as $field) {
if (!isset($_POST($field)) {
die('Missing required parameter: ' . $field);
}
}
$username = mysql_real_escape_string($_POST['username']);
$stm = $bgln->query("SELECT * FROM membrs where username='$username'");
$row_cntusername = $stm->num_rows;
if( strlen(mysql_real_escape_string($_POST['kadi'])) > 20) {
echo "<a id=\"error\">something something </a>";
$stm->close();
}
elseif($row_cntusername > 0){
echo "<a id=\"error\">In use</a>";
$stm->close(); }
//and other checkings goes on...
将jQuery更改为使用简单对象而不是序列化字符串。事先为每个输入字段设置变量:
$('#usernameinput').on('keyup change', function() {
var name = $('#name').val();
// ...
$.ajax({
type:'POST',
url:"formchk.php",
data: { name : name },
dataType:"html",
success: function(result){
$('#span').html(result)
}}
)});
答案 1 :(得分:0)
我知道这是一个老问题,但我遇到了同样的问题,空的$ _POST数组,并在重新阅读jQuery文档后找到了另一个解决方案。如果我更改了ajax param:“type:'post'”to“method:'post'”它在IE以及其他浏览器中都有效...在PHP代码中,$ _POST数组被正确填充。
$.ajax(
{
method: 'post',
dataType: 'json',
...