我这里有AJAX代码,它将多个值传递给PHP。但问题是PHP无法通过AJAX获取值传递,并且数据库中没有添加任何内容。然而,在我的提交按钮中,我有一个调用addAnnouncement()
的onclick事件,我认为它正在工作,因为我在我的ajax代码中发出警报,每次我点击该按钮就可以了。
所以我认为问题的一部分在于传递变量。
您认为我的代码中存在什么问题?
AJAX代码:
function addAnnouncement()
{
var subject = document.getElementById("subject").value;
var name = document.getElementById("name").value;
var announcement = document.getElementById("announcement").value;
var xmlhttp;
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)
{
if(xmlhttp.status==200){
alert("OK");
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
}
var variables = "subject=SAMPLE&name=HARVEY&announcement=HELLO";
xmlhttp.open("POST", "addAnnouncement.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(variables);
return false;
}
这是通过AJAX传递值的PHP代码。 PHP代码:
<?php
require_once("config.php");
$subject = $_POST['subject'];
$name = $_POST['name'];
$text = $_POST['announcement'];
$dateTimeNow = date("Y-m-d H:i:s");
$query = "INSERT INTO table_announcement(subject, name, text, dateTimePosted)".
"VALUES('$subject', '$name' , '$text', '$dateTimeNow')";
$data = mysql_query($query)or die(mysql_error());
if($data){
echo "ADDED!";
}
else{
echo "ERROR!";
}
?>
答案 0 :(得分:1)
退出事件处理程序时返回false
以防止提交按钮的默认行为(即提交表单):
function addAnnouncement() {
// …
return false;
}
同时检查XMLHttpRequest达到readyState
4时的状态(它可能与200不同)并使用encodeURIComponent
正确编码查询字符串参数。最后,但并非最不重要的是,您的代码对SQL注入是开放的。通过使用预准备语句(MySQLi和PDO中提供)来解决此问题。如果您无法确定哪个,this article会对您有所帮助。如果您选择PDO,here is a good tutorial)。