Php 如何将jquery变量传递给drupal(ajax)
我想通过考试Php 如何将jquery变量传递给drupal(ajax),php,drupal,Php,Drupal,我想通过考试 var x=10到drupal/php变量$x,无需页面刷新 有人能建议吗 非常感谢您的回复。 实际上,我正在为电子商务网站(Drupal6)开发定制模块。 在产品页面上,我有4个属性作为文本字段(宽度英寸、宽度英尺、高度英寸、高度英尺),通过计算,我得到了该产品的新价格。我在jquery中做了这个计算。 现在,我修改了“uc\u add\u to\u cart\u form”,添加了1个隐藏字段,并使用$会话将jquery新价格添加到该隐藏字段中。到目前为止,一切正常 我想将此
var x=10代码>到drupal/php变量$x,无需页面刷新
有人能建议吗
非常感谢您的回复。
实际上,我正在为电子商务网站(Drupal6)开发定制模块。
在产品页面上,我有4个属性作为文本字段(宽度英寸、宽度英尺、高度英寸、高度英尺),通过计算,我得到了该产品的新价格。我在jquery中做了这个计算。
现在,我修改了“uc\u add\u to\u cart\u form”,添加了1个隐藏字段,并使用$会话将jquery新价格添加到该隐藏字段中。到目前为止,一切正常
我想将此新价格保存到产品节点。我无法将此新价格设置为$node->price。
我使用uc_ajax_购物车作为“添加到购物车”按钮
有人能建议我如何继续吗?您需要知道:
菜单API:
一些Drupal JSON函数(可能)
变量集()
和jQuery ajax API:
本质上,您需要创建一个菜单项,该菜单项委托给回调(请注意您的权限),然后使用$.ajax()调用它。如果需要对响应执行某些操作,请参阅json_编码功能
您可能想在此处查看一些菜单示例:
我认为jQueryAjax API有一个Drupal接口。如果有人知道更好的方法,也许可以发表评论。将变量数据从JavaScript传递到Drupal/PHP是一回事。将信息从Drupal/PHP传递到JavaScript是另一件独立的事情。我想你的意思是你问题中的第一个。所以我会继续回答这个问题
将变量从JavaScript传递到Drupal/PHP
1) 实施一项计划。您可以在现有的或新的自定义模块上执行此操作,这取决于您正在执行的操作。这非常简单和直接,在Drupal站点上也有很好的文档记录
$items = array();
$items['my_custom_callback/%'] = array(
'title' => 'My Custom Callback',
'description' => 'Listing of blogs.',
'page callback' => 'my_custom_php_function',
'page arguments' => array(1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
让我们把上面的例子分解一下
$items['my\u custom\u callback/%']
$items只是一个数组,可以随意命名。如果我的网站的URL是www.alexanderallen.name,那么
将是我从JavaScript应用程序调用的资源
在数组的键中,单词my_custom_callback后面的百分比符号是占位符。这是您将数据从JS传递到PHP的地方。因此,如果变量x的值为10,那么来自JQuery的调用将如下所示:
<?php
/**
* @file example_module.module Handles fancy AJAX functionality.
*
*/
/**
* Implementation of hook_menu
*
* @see http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_menu/6
*/
function example_module_menu() {
$items = array();
$items['my_custom_callback/%'] = array(
'title' => 'My Custom Callback',
'description' => 'Listing of blogs.',
'page callback' => 'my_custom_php_function',
'page arguments' => array(1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Function that gets called from JQuery asynchronously.
*/
function my_custom_php_function($argument) {
// Do something with $argument...
echo $argument;
}
?>
<script type='text/javascript'>
var name = 'alexander';
var x = 10;
var z = 20;
$.get(
// Callback URL.
"http://www.alexanderallen.name/my_custom_callback/"+ name +"/"+ x +"/"+ z
);
</script>
当您加载该URL时,Drupal将找到您的菜单挂钩,它将调用您在“页面回调”数组键中定义的函数。在这种情况下,这将是:
<?php
/**
* Function that gets called from JQuery asynchronously.
*/
function my_custom_php_function($argument) {
// Do something with $argument...
echo $argument;
}
?>
在本例中,我将向PHP传递三个参数。”“页面参数”指定要传递给PHP的URL部分。如果要编写“页面参数”=>数组(0),
,那么PHP函数的参数将是字符串my\u custom\u callback
2) 使用JQuery从JS代码调用菜单钩子。JQuery提供了各种AJAX方法。您使用哪一种取决于您处理的数据的格式、大小以及其他因素
您很可能会使用两种JQuery方法之一。或者,记住post请求将允许比get请求更大的数据负载。因此,如果变量x的大小为10,则可能需要使用.get()。.post()和.get()方法都是该方法的扩展,或依赖于该方法。.ajax()方法更灵活,因为它为您提供了更多选项,例如指定数据格式(JSON或纯文本)、随请求发送用户名/密码、在同步或异步请求之间进行选择,以及浏览器是否应缓存请求
这是JQuery.get()方法的方法签名:
get(url[data],[callback(data,textStatus,XMLHttpRequest)],[dataType])
如果要使用GET to Drupal/PHP发送数据,可以使用上面的示例执行以下操作:
<?php
/**
* @file example_module.module Handles fancy AJAX functionality.
*
*/
/**
* Implementation of hook_menu
*
* @see http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_menu/6
*/
function example_module_menu() {
$items = array();
$items['my_custom_callback/%'] = array(
'title' => 'My Custom Callback',
'description' => 'Listing of blogs.',
'page callback' => 'my_custom_php_function',
'page arguments' => array(1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Function that gets called from JQuery asynchronously.
*/
function my_custom_php_function($argument) {
// Do something with $argument...
echo $argument;
}
?>
<script type='text/javascript'>
var name = 'alexander';
var x = 10;
var z = 20;
$.get(
// Callback URL.
"http://www.alexanderallen.name/my_custom_callback/"+ name +"/"+ x +"/"+ z
);
</script>
变量名='alexander';
var x=10;
var z=20;
$获取(
//回调URL。
"http://www.alexanderallen.name/my_custom_callback/“+name+”/“+x+”/“+z”
);
请注意,在.get()方法上使用data参数是可选的,在我的示例中我省略了它,但通过将要传递给Drupal/PHP的数据与URL的其余部分连接起来,实现了相同的效果
如果要运行该命令,HTTP GET请求将如下所示:
而反应会是这样的:
嗨,亚历山大,X+Z=30
将数据从Drupal传递到JavaScript
对于这一点,您可以使用行为,我不会详细讨论,因为我认为这不是您的问题,但您可以访问Drupal 6行为的官方文档。这个问题没有多大意义。请扩展问题,并解释你想做什么。简言之,除非您正在使用$var执行某些操作,否则为$var赋值是没有意义的。请求完成后,变量和其他所有内容都将消失。