我有一个观点,生病有3个div:
Div 1:带有复选框的品牌列表。 第2部分:带复选框的类别列表。
Div 3:项目清单。
根据前两个div中选择的内容,将使用所有项目刷新最后一个div。在开始时它会显示所有项目,在我们选择一些品牌和/或类别后按下刷新我想要刷新div 3。
在Javascript中我可以选择哪些类别/品牌,我最大的疑问是如何更新最后一个div ...
以下是我的尝试:
function refresh() {
var brands= /*<code where i get all the brands selected (this will be a js array)>*/
var categories = /*<code where i get all the categories selected (this will be a js array)>*/
<?php echo $ajax->remoteFunction(array('url' => array('controller' => 'items',
'action' => 'men', brands, categories),
'update' => 'itemsContent')); ?>
}
我的问题是: - 如何将js变量传递给php方法? - 如何在cakephp动作中收到js数组?因为品牌和类别将用于过滤为div 3生成结果的查询...
答案 0 :(得分:3)
您将无法在此使用$ajax
帮助程序,因为它只输出一个静态脚本,该脚本在浏览器中的“运行时”无法更改/影响。它只不是为了比它更复杂的东西。
所以,你必须推出自己的JS,但这不应该那么难。您所需要的只是:
我会看一下jQuery's AJAX functions来完成#3。如果您以这样的格式发布数据,可以在Cake的$this->data
中轻松访问它:
{
'data[ModelName][categories]' : categories,
'data[ModelName][brands]' : brands
}
关于你的问题:
“如何将js vars传递给php方法?”
你没有。 PHP在服务器上运行,并且在Javascript在浏览器中运行时已经完成。 JS和PHP之间唯一的“通信”是通过标准的HTTP GET和POST请求,无论请求来自标准浏览器还是JS或Flash或其他什么都无关紧要。
$ajax
帮助器只有一堆可以放入页面的预制Javascript片段,但是你的JS无法以任何方式与$ajax
助手“交谈”。
答案 1 :(得分:1)
我和你的情况类似,我在Javascript helper上发现了一些适用的方法。我用codeBlock()
包装了一大堆javascript,event()
用来连接click事件,但我不确定这比编写原始Javascript要清楚多少。
我发现CakePHP手册的AJAX section对于获得基本设置非常有帮助。然后我使用生成的Javascript并使其更具动态性。
在此示例中,每当用户点击链接时,我都会调用add_topic
操作。每次调用它时,我都会增加topicIndex变量并将其作为AJAX调用中的参数传递。 AJAX调用返回几行,这些行插入用户单击的链接上方的表中。
<tr id="add_topic_row"><td colspan="3">
<a id="add_topic_link" href="javascript:void(0);">New Topic
<?php echo $html->image('icons/add32.png');?></a></td></tr>
</table>
</fieldset>
<?php
echo $form->end('Submit');
$addTopicUrl = $html->url(array('action' => 'add_topic')) . '/';
$script = <<<EOS
var topicIndex = $index;
var addTopicUrl = '$addTopicUrl';
addTopic = function()
{
new Ajax.Updater(
'add_topic_row',
addTopicUrl + topicIndex,
{
asynchronous:true,
evalScripts:true,
insertion:Insertion.Before,
requestHeaders:['X-Update', 'add_topic']
});
topicIndex++;
}
EOS;
echo $javascript->codeBlock($script);
echo $javascript->event('add_topic_link', 'click', 'addTopic();')
?>