我通过在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控制器方法中的字符串吗?非常感谢,这是我的第一个问题,任何帮助都将非常感谢!!!
答案 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函数时处理。