2014-04-29 69 views
0

所以我有這個(預處理語句)的mysqli查詢在PHP(部分代碼):如何使用AJAX來執行mysqli的查詢(預處理語句)

#New DB connection 
@ $mysqli = new mysqli ('localhost', 'user', 'password', 'database'); 

#Check DB connection, print error upon failure 
if (mysqli_connect_errno()) { 
    printf("<p>Connect failed.</p> <p>Error: \"%s\"</p>\n", mysqli_connect_error()); 
    exit(); 
} #if 

#Check if userName already exists 
$query = "SELECT * FROM users WHERE userName = ?"; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param("s", $registerUserName); 
$stmt->execute(); 
$stmt->store_result(); 
$num_results = $stmt->num_rows; 
if ($num_results) { 
    echo "<p>This user already exists. Please click your back button.</p>"; 
    exit; 
}; #if 

而且我想通過JavaScript執行此/ AJAX上onblur事件:

function checkForUser(str) { 
    var xmlhttp;  
    if (str=="") { 
    return; 
    } 
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
    else{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open(???,true); // not sure what goes here or if I should even use this method 
    xmlhttp.send(); 
} 

所以這是可能的嗎?如何?我找到了一些教程,但他們涉及使用jQuery。我可以做到沒有jQuery嗎?

+0

問題文件的名稱是什麼(請求應該在哪裏)? '$ registerUserName'也從哪裏獲得值? – kero

+0

只要做一個簡單的谷歌搜索「阿賈克斯教程」,取代回調網址到您的PHP腳本張貼您需要的用戶名,你應該很好去。 – Kypros

回答

0

我改變了一點點你的代碼。希望這將有幫助:在

req.open("GET", "/ttt.php?registerUserName="+encodeURIComponent(uname), false); 

function checkForUser(uname) 
{ 
var req; 
req = null; 
if (window.XMLHttpRequest) { 
    try { 
     req = new XMLHttpRequest(); 
    } catch (e){} 
} else if (window.ActiveXObject) { 
    try { 
     req = new ActiveXObject('Msxml2.XMLHTTP'); 
    } catch (e){ 
     try { 
      req = new ActiveXObject('Microsoft.XMLHTTP'); 
     } catch (e){} 
    } 
} 

if (req) {  
    req.open("GET", "/ttt.php?registerUserName="+encodeURIComponent(uname), false); 
    //req.onreadystatechange = processReqChange; 
    req.send(null); 
    if(req.status == 200) { 
     return req.responseText; 
    } 

} 
return false; 
} 

#New DB connection 
@ $mysqli = new mysqli ('localhost', '…', '…', '…'); 

#Check DB connection, print error upon failure 
if (mysqli_connect_errno()) { 
    printf("<p>Connect failed.</p> <p>Error: \"%s\"</p>\n", mysqli_connect_error()); 
    exit(); 
} #if 

#Check if userName already exists 
$query = "SELECT * FROM wp_users WHERE user_login = ?"; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param("s", $_GET[registerUserName]); 
$stmt->execute(); 
$stmt->store_result(); 
$num_results = $stmt->num_rows; 
if ($num_results) { 
    echo "<p>This user already exists. Please click your back button.</p>"; 
    exit; 
}; #if 

現在我們可以用URL調用它像 「/ttt.php?registerUserName=user1」 和功能false表示異步請求,並且req.send將等待來自php腳本的響應。

+0

非常感謝您的回覆。非常感謝。我還沒有片刻嘗試過呢..會回到這個帖子。 – nOrakat

+0

不知道你是否會看到這個..再次感謝在舊的瀏覽器中改進try/catch。想知道你是如何消除'req.onreadystatechange = function(){..'。我認爲你的意思是'假'意味着'同步'的要求,是嗎? 'true'是異步的,需要一個onreadystatechange事件(?) – nOrakat

+0

是的,沒錯。 'req.open(...,false)'請等待響應。默認情況下,這個參數是'true'並且是異步執行的。如果它比另一個線程調用'onreadychange'事件異步執行。但是'checkForUser'函數在那個時候已經完成了,並且不能返回任何結果。 –

相關問題