如何使用AJAX

时间:2015-12-31 12:38:06

标签: javascript php ajax

我正在使用AJAX从php文件中查询数据库....然后应该将数据库查询的结果放在两个不同的html textareas中。这是我的代码:

javascript:

function ajax_post(){
// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();
// Create some variables we need to send to our PHP file
var url = "displaypatientmessage.php";
var fn = document.getElementById("title").value;
//var ln = document.getElementById("last_name").value;
var vars = "title="+fn;

hr.open("POST", url, true);
// Set content type header information for sending url encoded variables in the request
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {

    if(hr.readyState == 4 && hr.status == 200) {
        var return_data = hr.responseText;
        document.getElementById("question").innerHTML = return_data;
    }
}
// Send the data to PHP now... and wait for response to update the status     div
hr.send(vars); // Actually execute the request
document.getElementById("question").innerHTML = "processing...";
}

PHP

<?php
$title = $_POST['title'];
$conn=mysqli_connect("localhost","root","","askthedoctor");
$sql="select patient_text, doctor_text from messages where     title='".$title."';";
$result=mysqli_query($conn,$sql);
$row=mysqli_fetch_array($result);
echo $row[0];
echo $row[1];
?>

形式

<form>
   <table id="table" class="table">
      <tr>
         <th>Messages</th>
         <th>Problem Description</th>
         <th>Doctor's Answer</th>
         <th></th>
      </tr>
      <tr>
         <th><select id="title">
               <?php   
$sql="select title from messages where paitient_id=(select id from login where username='".$username."');";
$result=mysqli_query($conn,$sql);
while($row=mysqli_fetch_array($result))
{
?>
               <?php echo "<option value=\"mesazhi1\">".$row[0]."</option>";}?>
            </select>
         </th>
         <td><textarea rows="17.95" col="100" id ="question" > </textarea></td>
         <td><textarea rows="17.95" col="100" id ="answer" readonly> </textarea></td>
      </tr>
      <tr>
         <td></td>
      </tr>
      <tr>
         <td><input type="button" name="openmessage" value="Display Selected Message" onClick="ajax_post();"></td>
      </tr>
   </table>
</form>

现在我希望将回声$row[0]置于问题文本区域 和echo $row[1]将被放入回答textarea

2 个答案:

答案 0 :(得分:1)

您需要使用~等字符加入两个输出。

echo $row[0] . '~' . $row[1];

在javascript代码中,将响应按~拆分为:

var return_data = hr.responseText;
var temp = return_data.split('~');
document.getElementById("question").innerHTML = temp[0];
document.getElementById("answer").innerHTML = temp[1];

基本概念是:

您需要通过AJAX传递多个字符串,而不是单个字符串。

用字符加入两个字符串。

在javascript结尾,按~爆炸(拆分)输出。

在这里,你得到阵列。

数组的第一个元素是问题,第二个元素就是答案。

很简单!!!

答案 1 :(得分:1)

不要像这样回显文本,只需返回一个json对象。

使用php函数json_encode将数组编码为json:

json_encode(array('question' => $row[0], 'answer' => $row[1]));

然后在您的成功函数中,您将结果解析为这样的javascript对象:

var result = JSON.parse(result);

然后,您可以访问以下行来填充字段

result.question; result.answer;

您当前代码无效的原因是您的ajax查询需要1个结果。所以它不会将你的两个回声识别为一对。

编辑:

同样使用jQuery,vanilla javascript笨重而丑陋。