2011-06-01 85 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,这没有任何意义。