2011-06-01 82 views
1

的問題是this.I要保存在MySQL數據庫的每封郵件,我嘗試這樣做使這個javascript函數:問題與AJAX聊天

function doWork(str) 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// Използваните браузъри 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// Кой ли ползва тези версии.. 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET","newmsg.php?q="+str,true); 
    xmlhttp.send(); 
} 

然後文本字段:

<div id="sender"> 
    Your message: <input type="text" name="msg" size="30" id="msg" /> 
    <button onclick="doWork(this.msg);">Send</button> 
    </div> 

最後的php文件:

$q=$_GET["q"]; 
    (str)$q; 
    $db_connect = mysql_connect('localhost', 'root', 'diamond'); 
    if(!$db_connect) 
     { 
     die('Не може да се осъществи връзка с базата данни' . mysql_error()); 
     } 
mysql_select_db("chat", $db_connect); 
$sql = "INSERT INTO messages (user_id, time, text) VALUES ('1','1234','$q')"; 
mysql_query($sql); 
mysql_close($db_connect); 

和實際發生的是,USER_ID和時間字段正確填寫,b在「文本」字段中顯示「未定義」。 這是什麼意思,我該如何解決這個問題? 感謝 Leron

+1

看看一個名爲Fiddler的程序。它允許您檢查傳入/傳出的http請求。我的猜測是,doWork並沒有首先獲取字符串。但菲德勒可以證實這一點。只需選擇請求,選擇Inspectors,最後選擇TextView或WebForms。看起來像你的例子的一部分沒有通過任何一個 - 特別是什麼觸發doWork函數。 – mrtsherman 2011-06-01 21:52:33

回答

2

我相信問題在於您對輸入文本字段的引用。試試這個:

<div id="sender"> 
    Your message: <input type="text" name="msg" size="30" id="msg" /> 
    <button onclick="doWork(document.getElementById('msg').value);">Send</button> 
</div> 

當您使用以下,'this'指的是按鈕元素,所以不要做以下事情。

<button onclick="doWork(this.msg);">Send</button> 
+0

這工作得很好,非常感謝! – Leron 2011-06-01 22:18:25

-1

類型轉換(str)不存在,這是(string)。你必須這樣做:

$q = (string) $q; 

其實這是非常沒有意義的,因爲URL的字符串。所以把這條線留下。

另外,正如其他反饋者提到的那樣,這不是獲得價值的正確方法。如果按照以下方式進行操作,該按鈕也可以通過返回鍵進行訪問。用onclick用戶被迫點擊按鈕。添加return false,以便表單不會被提交。 this指向<form>

<form onsubmit="alert(this.msg.value); return false"> 
    <p> 
     <input type="text" name="msg" /> 
     <button type="submit">Send</button> 
    </p> 
</form> 
+0

由於downvote,我的帖子出了什麼問題? – Midas 2011-06-01 22:06:03

1

doWork(document.getElementById('msg'));

this有一個按鈕元件。它在字符串轉換中沒有msg屬性,即未定義。

0

更換
<button onclick="doWork(this.msg);">Send</button>
<button onclick="doWork(msg);">Send</button>

this.msg相同button.msg,這沒有任何意義。