使用PHP进行数据库更新后,no-jquery ajax更新视图

时间:2014-05-26 22:11:52

标签: javascript php ajax templates httprequest

我通过在PHP和MySQL中构建一个站点来学习MVC和Ajax。我创建了一个新的控制器方法来处理ajax,现在我能够从Ajax HTTPRequest成功更新数据库。当我得到响应时,我能够通过用“Hello”之类的javascript字符串替换除法的当前内容来更新除法,但我无法弄清楚如何用更新的数据库数据替换内容。如何正确更新分部?现在我想在没有JQuery的情况下这样做,并且我没有使用PHP框架。分部中的数据是成员所在地的列表。在Ajax之前,列表在加载页面时被发送到“视图”:

//this is controller->index()
public function index() {
    //the properties will be pulled up from the db as neccessary so we need to set them first
    $this->member->setMembername();
    $this->member->setMemberProfile();
    $this->member->setMyPlacesList();
    $this->member->setMemberData(); //puts the above data into one array for convenience
    $this->view->setData($this->member->getmemberData());
    $this->view->render('welcomepage/index'); //builds the view with the data
}

现在在我的ajax调用中,我的控制器告诉成员模型更新成员所在的位置列表:

public function AjaxAddVisit() {
    $details['sitename'] = $_POST["sitename"];
    $details['datetime'] = date("Y-m-d H:i:s");
    $details['comments'] = $_POST['comments'];
    $this->member->addMemberVisit($details); This successfully adds the place to the database.  
    //I suppose I should now do something like ?
    //$this->member->setMyPlacesList();
    //$this->member->setMemberData();
    //$this->view->setData($this->member->getmemberData());//this would update the views data
}

我现在想要从Ajax代码修改视图中的列表,但不知道如何,我是否做了类似下面的内容,我只是在这样的javascript字符串中嵌入php代码?:

function AddVisitResponse() {
    if (myReq.readyState == 4) {
        if(myReq.status == 200) {
        var phpString = "<?php echo $this->data['myPlacesList'][0][1] ?>";
        document.getElementById('myPlacesList').innerHTML = phpString;
        //this would just print out one element of the list, but just for example
        } else {
        alert("got no response from the server");
        }
    }
} 

以上的输出类似于:myPlacesList'] [0] [1]?&gt;所以我认为一定有问题。看来我根本不能发回一个带有PHP代码的字符串,即使我回应“你好”它也行不通。如何正确更新分部?我应该使用XML格式化我的php控制器方法中的字符串吗?非常感谢,这是我的第一个问题,任何帮助都将非常感谢!!!

1 个答案:

答案 0 :(得分:1)

如果没有看到完整的ajax代码(你的myReq变量的范围是什么?)很难说,但是无论从服务器发送回你的ajax脚本,都应该可以通过myReq.responseText访问。

因此您需要将您的功能修改为:

function AddVisitResponse() {
    if (myReq.readyState == 4) {
        if(myReq.status == 200) {
            document.getElementById('myPlacesList').innerHTML = myReq.responseText;
        } else {
            alert("got no response from the server");
        }
    }
}

请注意,您在javascript on page-load中包含的任何php都已在您运行javascript函数时处理。