我正在尝试显示联系信息并允许进行编辑。它没有更新该字段。基本上,我想使用的div有(例如)一个地址,我点击它,它突出显示然后出现一个编辑框,我编辑,点击确定,然后事情更新为成功。然而,数据没有更新,我可以在查看记录时告知。
以下是相关代码的片段:
控制器:
var $helpers = array ('Html','Form','Ajax','Javascript','Menu');
var $components = array( 'RequestHandler');
var $name = 'People';
...
function edit_in_place() {
if (!empty($this->data)) {
if ($this->Person->save($this->data)) {
$thisId=$this->Person->id;
$this->header("Content-Type: application/json");
echo 'success';
exit;
} else {
return 'Fail';
}
}
$this->Autorender = FALSE;
exit;
}
查看触发器EDIT_IN_PLACE:
<div id="addresswork">
<?php echo $person['Person']['addresswork'] ?>
</div>
<?php
echo $ajax->editor(
"addresswork", array(
'controller'=>'People',
'action'=>'edit_in_place',
$person['Person']['id']
),
array('highlightcolor'=>'#aaeeff')
)
?>
我试过找到关于此的好文档并且失败了。有什么建议吗?
答案 0 :(得分:2)
尝试在保存前设置ID。此外,您正在传递参数中的ID,因此您需要添加:
function edit_in_place($person_id) { // notice param
$this->header("Content-Type: application/json");
$this->Person->id = $person_id; // set the id.
$json = $this->Person->save($this->data) ? '{"r":"Pass"}' : '{"r":"Fail"}';
$this->set('json', $json);
// make a new view edit_in_place.ctp file that prints the variable.
}
有五点需要注意:
您必须告诉CakePHP您要更新哪条记录。在您的视图中,您正在创建/controller/edit_in_place/1
之类的操作,其中1
为ID。您必须在函数中访问该id作为参数,并将其传递给模型。
你回应'成功',但只是回归'失败'。这可能就是为什么动作看起来像是通过了。由于autorender是假的,并且你没有在失败条件下回应任何东西,你可能得到一个200响应代码,身体里什么都没有。
你为什么要从控制器回应?这打破了MVC设计。如果您有兴趣以CakePHP的方式进行操作,则应创建一个回显变量的新视图,并将该变量设置为控制器中的成功或失败(更可能将该变量传递给JSON字符串)。
您告诉浏览器标头它是JSON,但您没有返回JSON。我已经更新了我的示例以显示正确的JSON编码数据。如果你要做更复杂的事情,你应该使用PHP json_encode
函数。
无需在$this->data
上检查是否为空。如果为空,则保存将失败。
答案 1 :(得分:1)
我得到了它的工作 - 问题是我没有像我预期的那样将数据输入控制器中的函数。所以我做了一个print_r来弄清楚params回来了。这就是我所做的,虽然我对正确的方法有任何更多的评论感兴趣:
function edit_in_place() {
if ($this->RequestHandler->isAjax())
{
$this->Person->id = $this->params['named']['id'];
$field= $this->params['form']['editorId'];
$value= $this->params['form']['value'];
$this->Person->saveField($field,$value);
Configure::write('debug', 0);
echo $value;
exit;
}
在触发此操作的视图中,我这样做了:
<div id="addresswork">
<?php echo $person['Person']['addresswork'] ?>
</div>
<?php
echo $ajax->editor(
"addresswork",
array(
'controller'=>'People',
'action'=>'edit_in_place',
'id'=>$person['Person']['id']
),
array(
'submit'=>'OK',
'style'=>'inherit',
'submitdata' =>array('id'=>$person['Person']['id']),
'tooltip'=>'Click this to edit',
'highlightcolor'=>'#aaeeff')
);
?>
答案 2 :(得分:0)
我认为你的json不对。您应该创建一个视图,包含javascript助手并执行类似
的操作$javascript->object('success');