$ _POST在Internet Explorer中出错

时间:2014-02-20 17:04:51

标签: javascript php jquery ajax

我做了一个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的缓存问题,但它也不起作用。

2 个答案:

答案 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',
  ...