我在使用Ajax显示数据时遇到问题

时间:2013-01-10 19:09:50

标签: php javascript ajax

你是怎么做的,我现在已经工作了2个小时了,当我改变它时,我似乎无法让我的页面动态显示信息。如果有人能告诉我出了什么问题,我将不胜感激。

这是我的HTML

<h2>Feedbacks</h2>
<form>
<select onchange="viewFeedback(this.value);">
    <option value="unread">View Unread</option>
    <option value="all" >View All</option>
</select>
</form>
<div id="feedbackview"></div>

这是我的ajax

function createObject() {
var request_type;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
    request_type = new ActiveXObject("Microsoft.XMLHTTP");
}else{
    request_type = new XMLHttpRequest();
}
return request_type;

}
var http = createObject();
function viewFeedback(condition) { 
    http.onreadystatechange = function() {
        if(http.readyState == 4) {
            document.getElementById('feedbackview').innerHTML=http.responseText;
        }
        http.open("GET",'viewfeedback.php?condition='+condition,true);
        http.send(null);
    }   
 }

这里是php

$condition = $_GET['condition'];
$db = new db();

$query = $db->query("SELECT * FROM feedback");
$rows = $db->countRows($query);
if($rows != 0) {
    $results = $db->getRows($query);
    foreach($results as $result) {
        extract($result);
        echo $name;
    }
}

2 个答案:

答案 0 :(得分:1)

open()send()来电不应该在onreadystatechange事件中,请将其移到外面。您也可以将事件从viewFeedback()移到境外,因为每次下拉列表更改时都无需重新定义事件。

var http = createObject();
http.onreadystatechange = function() {
    if(http.readyState == 4) {
        document.getElementById('feedbackview').innerHTML=http.responseText;
    }
}
function viewFeedback(condition) { 

    http.open("GET",'viewfeedback.php?condition='+condition,true);
    http.send(null);
 }

另请注意,您不会在PHP端对$_GET['condition']执行任何操作,因此无论选择哪个下拉项,响应都将始终相同。

答案 1 :(得分:0)

首先,我不知道Ajax创建功能是否如此之大。我暂时将其注释掉,只有在支持的浏览器中无法使用时才将其添加回去。相反,只需这样做:

var http = new XMLHttpRequest();

接下来,尝试直接在浏览器中访问PHP Web服务。它有效吗?如果是这样,请修复Ajax请求中的问题:

function viewFeedback(condition) {
    http.open("GET", 'viewfeedback.php?condition=' + condition, true);
    http.onreadystatechange = function() {
        if (http.readyState == 4) {
            if (http.status == 200) {
                document.getElementById('feedbackview').innerHTML = http.responseText;
            } else {
                console.log(http.response);
            }
        }
    }
    http.send(null);
}

如果这不起作用,请告诉我。