Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用PHP更新数据库后,没有jquery ajax视图更新_Javascript_Php_Ajax_Templates_Httprequest - Fatal编程技术网

Javascript 使用PHP更新数据库后,没有jquery ajax视图更新

Javascript 使用PHP更新数据库后,没有jquery ajax视图更新,javascript,php,ajax,templates,httprequest,Javascript,Php,Ajax,Templates,Httprequest,通过使用PHP和MySQL构建站点,我学习了MVC和Ajax。我创建了一个新的控制器方法来处理ajax,现在能够从ajax HTTPRequest成功地更新数据库。当我得到响应时,我可以通过使用javascript字符串(如“Hello”)替换分区的当前内容来更新分区,但我不知道如何用更新的数据库数据替换分区的内容。如何正确更新分区?现在我不想使用JQuery,也不想使用PHP框架。部门中的数据是一个成员去过的地方的列表。在Ajax之前,在加载页面时,列表被发送到“视图”: //this is

通过使用PHP和MySQL构建站点,我学习了MVC和Ajax。我创建了一个新的控制器方法来处理ajax,现在能够从ajax HTTPRequest成功地更新数据库。当我得到响应时,我可以通过使用javascript字符串(如“Hello”)替换分区的当前内容来更新分区,但我不知道如何用更新的数据库数据替换分区的内容。如何正确更新分区?现在我不想使用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");
        }
    }
} 
函数AddVisitResponse(){
如果(myReq.readyState==4){
如果(myReq.status==200){
var phpString=“”;
document.getElementById('myPlacesList')。innerHTML=phpString;
//这将只打印出列表中的一个元素,但只是举个例子
}否则{
警报(“未收到服务器的响应”);
}
}
} 

上面的输出类似于:myPlacesList'][0][1]?>所以我认为一定是出了什么问题。似乎我根本无法用php代码发回字符串,即使我回显“hello”时它也不起作用。如何正确更新分区?我应该在php控制器方法中使用XML格式化字符串吗?非常感谢,这是我在这里的第一个问题,任何帮助都将不胜感激

如果看不到完整的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函数时,页面加载javascript中包含的任何php都已被处理。

您可以在ajax调用中返回完整的列表(将其放入带有json_encode的json对象中),也可以只返回添加的项,然后附加该项。这取决于你。在JS中嵌入php不会起作用,因为php只能在上运行一次pageload@user574632非常感谢您关于使用JSON的建议,我听说过,但不知道它在哪里有用。多亏了你的建议,我现在已经查过了,我正试着用它来回答下一个问题!谢谢没问题,坚持使用JSON,相比之下XML是一种痛苦。非常感谢您的帮助。我不熟悉myReq.responseText的工作原理!现在我正在用JSON格式化responseText。我也可以试试XML。你为我节省了很多时间!