如何将多个变量从AJAX传递给PHP?

时间:2013-12-08 16:02:40

标签: javascript php ajax

我这里有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!";
    }   
?>

1 个答案:

答案 0 :(得分:1)

退出事件处理程序时返回false以防止提交按钮的默认行为(即提交表单):

function addAnnouncement() {
    // …
    return false;
}

同时检查XMLHttpRequest达到readyState 4时的状态(它可能与200不同)并使用encodeURIComponent正确编码查询字符串参数。最后,但并非最不重要的是,您的代码对SQL注入是开放的。通过使用预准备语句(MySQLiPDO中提供)来解决此问题。如果您无法确定哪个,this article会对您有所帮助。如果您选择PDO,here is a good tutorial)。