2014-02-20 42 views
0

我做一個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

哪個版本的IE? jQuery 2.x不支持IE <= 8。 –

+1

你永遠不會檢查值是否設置爲'isset()'或'!empty()' – h2ooooooo

+0

@EdCottrell:jQuery 2。x只適用於IE 9+。 –

回答

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) 
     }} 
)}); 
+0

的問題中必須有解決這些問題的方法謝謝,我試過了,現在它給出了「沒有發佈的數據收到「錯誤,因爲你在代碼中寫道,但我不明白,爲什麼它不會發布數據:( – ctarimli

+0

我添加了一個示例來嘗試與您的jQuery – NobleUplift

+0

我試過你的例子仍然適用於其他瀏覽器但不在IE中 – ctarimli

0

我知道這是一個老問題,但我只是有同樣的問題,空$ _POST陣列,發現後重新閱讀了jQuery文檔另一種解決方案。如果我將ajax參數:「type:'post'」更改爲「method:'post'」,它將在IE以及其他瀏覽器中工作......在PHP代碼中,正確填充$ _POST數組。

$.ajax(
    { 
    method: 'post', 
    dataType: 'json', 
    ...