我今天花了很多时间研究如何在cakephp中使用ajax请求保存数据,现在已经知道在cakephp网站上的文档似乎缺少该特定主题。
我有几个可排序的列表,对一个列表项进行排序时,我需要保存每个列表项的位置。我有一个如下设置的ajax请求,该请求在移动项目时触发:
$.ajax({
url: "/orders/save_column_order",
type:"POST",
data:"data="+data
});
控制器中引用的功能为:
function save_column_order(){
if($this->RequestHandler->isAjax()){
SAVE STUFF...
}
}
我已经设置了助手等:
var $helpers = array('Html','Form','Js');
var $components = array('Session','Email','RequestHandler');
而且它不起作用…
所以我的问题是:
1)当前向控制器中的动作发送ajax请求的URL是什么?它仅仅是/ controller / action吗?
2)我还需要对控制器做些什么来访问ajax数据?
奖金:
3)有没有一种方法可以在CakePHP框架中包含一个自定义phphtml" target="_blank">文件,该文件引用数据库设置,以便我可以手动更新mysql数据库?
你很亲近
1.)URL只是/ controller / action。数据以$ this-> data传递,并且在操作中可以神奇地使用。**由于您在助手中列出的是“
Js”而不是“ Javascript”,因此我假设您使用的是Cake 1.3.x和jQuery,因为jQuery是Cake
1.3的默认设置,而Js代替了Javascript / Ajax。
-修复您的助手:
var $helpers = array('Html', 'Form', 'Js'=>array("Jquery"));
-修复您的jQuery:
$.ajax({
url:'/orders/save_column_order',
type:'POST',
data:data
});
2.)使用蛋糕的魔力:
function save_column_order() {
if ($this->data != null) {
$this->Model->save($this->data);
// whatever else needs doing...
}
}
-因为您正在做ajax,所以您可能不想要Cake的默认视图渲染行为(只是一个猜测。)如果您想完全渲染任何视图,则可能只是ajax回调的标记片段,所以您可能希望将其放置在元素中,而不是完整的视图中:
function save_column_order() {
// ...
/* arg 1 - you can specify any view or element you like.
arg 2 - enforces your preferred request handling and layout */
$this->set(compact('vars', 'for', 'view'));
$this->render('/elements/new_column_order', 'ajax');
}
-否则,仅抑制渲染:
function save_column_order() {
...
$this->autoRender = false;
}
-如果保存无效,请确保$ this-> data的结构对Cake-save友好。如果您需要查看$ this-> data的内容,Cake的内置调试(从应用程序中的任何位置)将帮助您弄清楚:
debug($this->data);
3)等等,什么?
不确定我是否正确理解您的要求,因此,如果这不能解决您的问题,请说明您要执行的操作?
如果您的意思是,Cake将允许您手动更新表中的记录,是吗?尽管我不确定您为什么要这么做。Cake极其强大的内置ORM是该框架的一半,而其极其全面的魔力是另一半。
您可以使用Model :: sql()方法来编写简单的SQL,尽管不建议这样做,因为它不是OOP或可重用的。
在模型中定义关联时,可以将外键设置为false并指定条件,这些条件的工作方式类似于Cake的自动联接中的嵌套选择。
如果您需要强制加入,Cake的$ options [‘joins’]可以让您完全控制。如果默认的LEFT不能满足您的需要,则可以指定任何类型的JOIN。
您可以使用$ this-> Model-> bind()/
unbind()快速建立和断开模型绑定。您可以指定递归级别,应用可包含行为,指定要选择的字段以及所有条件。
如果需要子查询,而Cake无法正确处理它,则$ dbo-> buildStatement()将构造您的SQL语句,而$ dbo->
expression()将触发它:
function intricate() {
$dbo = $this->Rate->Status->getDataSource();
$subquery = $dbo->buildStatement(
array(
'fields' => array('`Status`.`id`'),
'table' => $dbo->fullTableName($this->Rate->Status),
'alias' => 'Status',
'limit' => null,
'offset' => null,
'joins' => array(),
'conditions' => $subqueryConditions,
'order' => null,
'group' => null
),
$this->Rate->Status
);
$subquery = "Status.id = (".$subquery.")";
$status = $dbo->expression($subquery);
$options['fields']=
array(
"Rate.id", "Rate.plan_id", "Rate.status_id","Rate.rate", "Plan.id",
"Plan.company_id", "Plan.name", "Company.id", "Company.name"
);
$options['conditions']=
array(
$status,
"Geographical.name LIKE '%{$this->zip}%'"
);
$rates = $this->Rate->find('all', $options);
$this->set(compact('rates'));
}
-如果您的意思是-Cake将允许您即时交换数据库配置,是的。但是,这样做可能会变得非常顽固,尤其是当Cake的魔力成为这种情况的一部分时。
您可以在/app/config/database.php中添加多个数据库配置-
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host'=>'localhost',
'login' => 'cake',
'password' => 'icing',
'database' => 'dev'
);
var $offsite = array(
'driver' => 'mysql',
'persistent' => false,
'host' => '11.22.33.44', // or whatever
'login' => 'cake',
'password' => 'frosting',
'database' => 'live'
);
}
-根据情况的复杂程度,在控制器/模型中在它们之间进行切换会使情况变得有些紧张:
// Model::getDataSource()->configKeyName holds whichever db config you're using
if ($this->Model->getDataSource()->configKeyName != 'default') {
// do something, for example, change models, tables, reload schema, etc.
$this->loadModel('Special')
$this->Model->table = 'extras';
$this->Model->schema(true);
} else {
// predictably, Model::setDataSource($configKey) changes configs
$this->Model->setDataSource('offsite');
}
-如果这是您的意思,我可以粘贴几周前编写的代码块,要求将ajax表单提交(在表单完成的两个阶段)保存到2个数据库中的3个表中(其中一个服务我的Cake应用程序,另一个服务于旧版CodeIgniter应用程序)展示了所有这些花式的实际操作,以及一些不错的老式Cake Magic通过保存/更新快捷键的连接。(我还必须生成选择性电子邮件,最后,触发REST请求,将新插入记录的ID传递给CI应用程序以触发其处理。哇!)
无论如何,HTH。:)
这段javascript代码如下所示。注意,当file input元素的值发生变化时(即,一旦他们选择了要上传的文件),就会调用该命令 请原谅所有控制台日志。它的目的是显示输出和调试。 您将看到,我还附加了一个username字段,只是为了测试帖子是否在控制器中使用了一些完整的数据。的确是。以下是记录数组的输出: 有什么想法吗??
问题内容: 如何将表单数据保存在文件或本地db(也许使用AJAX)中,该文件或数据通过表单操作将数据发送到外部db? 我的表单的源代码在这里:http : //jsbin.com/ojUjEKa/1/edit 我应该对代码进行哪些更改(如果有)? 对。因此,我能够使用AJAX将数据存储到localStorage中,并希望将存储的数据发送到名为backend.php的文件中。这是我的html文件:
我想内联编辑列表页上的变量使用引导x-edable。我以前使用过这个功能,但是在一个只有一个ID和一个值的表上运行良好。现在在这种情况下,用户点击内容概览页面中的用户名。单击后,用户名变成一个带有用户名的选择框。这工作得很好。但在保存时不存储数据。至少存储为0 他认为: 单击此按钮,它将变为(似乎可以): 激活选择框的脚本为: 保存后,使用内容控制器中的此功能: 真的希望有人能看到我哪里出错了,或
我试图找出如何整合谷歌隐形reCaptcha到一个自定义提交表单附加到submit.js(ajax)。多亏了这一点,我成功地在99%的网站上使用了谷歌的新隐形reCaptcha。我尝试遵循相同的指南,但当我尝试添加到listing.php之前调用submit.js(ajax),一切正常,但如果用户犯了一些错误(忘记一些字段),值不会像以前那样保存。这里是submit.js(ajax) 有什么想法吗
问题内容: 美好的一天,我正在尝试从表单中发送或获取数据,然后使用jquery和ajax将数据发送到应保存在数据库中的php页面中,如何在jquery中使用ajax来做到这一点,任何帮助会做的,谢谢! HTML页面1,它将使用jquery ajax将数据发送到php页面 PHP页面2将从页面1表单中接收数据 这个项目的任何帮助将极大地帮助我们,谢谢! (更新)这是我尝试使用的jQuery,但它转到
我正在学习cakephp,已经做了很多。我问这个问题的唯一原因是cakePHP中的文档可能是错误的。我不能从文档或过去的stackoverflow帖子中看到为什么(子)教师表不保存(父)用户表中id表中的user_id。我得到没有错误,但user_id是0在教师表,所以它不捡起它从用户表。我在两个模型上有一对一的关系。我只是测试保存超过2个模型,我有一个用户和老师。我只是在表单中输入数据,并创建一