var x = 10; drupal / PHP变量$x没有页面刷新.
谁有人建议?
非常感谢你的答复.
实际上我正在为电子商务网站(Drupal 6)开发自定义模块.
在产品页面上,我有4个属性作为文本字段(宽度英寸,宽度英尺,高度英寸,高度英尺)通过做一些计算,我得到了该产品的新价格.我在j查询中做了那个计算.
现在我改变“uc_add_to_cart_form”并添加1个隐藏字段,并使用$_SESSION将jquery新价格带入该隐藏字段.到目前为止一切正常.
我想将这个新价格保存到产品节点.我无法将此新价格设置为$node->价格.
我使用uc_ajax_cart“添加到购物车”按钮.
任何人都可以建议我怎么办?
将变量从JavaScript传递到Drupal / PHP
1)实现menu hook.您可以在现有的自定义模块或新自定义模块上执行此操作,这取决于您正在执行的操作.它非常简单直接,在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,);
让我们分解上面的例子.
$项目[ ‘my_custom_callback /%’]
$items只是一个数组,它可以命名任何你喜欢的名字.如果我的网站的URL是www.alexanderallen.name,那么http://www.alexanderallen.name/my_custom_callback将是我从我的JavaScript应用程序调用的资源.
在数组的键中,单词my_custom_callback之后的百分比符号是占位符.这是您将数据从JS传递到PHP的地方.因此,如果变量x的值为10,则来自JQuery的调用将如下所示:
http://www.alexanderallen.name/my_custom_callback/10
当您加载该URL时,Drupal将找到您的菜单挂钩,它将调用您在“页面回调”数组键中定义的函数.在这种情况下,将是:
<?PHP /** * Function that gets called from JQuery asynchronously. */ function my_custom_PHP_function($argument) { // Do something with $argument... echo $argument; } ?>
在那里,您可以使用变量x的值执行任何操作,例如将其存储在数据库中.
如果您将菜单挂钩放在自定义模块上,并且模块的名称是example_module,则菜单挂钩和自定义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',); return $items; } /** * Function that gets called from JQuery asynchronously. */ function my_custom_PHP_function($argument) { // Do something with $argument... echo $argument; } ?>
如果您想将多个变量从JQuery传递到Drupal / PHP,您可以考虑在将它们传递给PHP之前在JavaScript中对它们进行JSON化.请记住,如果有效负载非常大,您应该考虑使用JQuery .post()而不是.get().用于解码JSON的PHP函数是here on php.net.
不要忘记在example_module_menu()函数的末尾返回$items.如果您想将两个或多个参数从JavaScript传递给PHP,那么菜单项看起来类似于:
function example_module_menu() { $items = array(); $items['my_custom_callback/%/%/%'] = array( 'title' => 'My Custom Callback','page arguments' => array(1,2,3),); return $items; } function my_custom_PHP_function($arg1,$arg2,$arg3) { // Do something ... $sum = $arg2 + $arg3; echo "Hi". $arg1 .",X + Z = ". $sum; } ?>
在这种情况下,我将三个参数传递给PHP. ‘page arguments’指定要传递给PHP的URL部分.如果你要写’page arguments’=> array(0),那么你的PHP函数的参数就是字符串my_custom_callback.
2)使用JQuery从JS代码调用菜单钩子. JQuery提供了各种AJAX方法.您使用哪一个取决于您处理的数据格式及其大小等.
您很可能会使用两种JQuery方法之一. .post()或.get(),请记住,发布请求将允许比获取请求更大的数据有效负载.因此,如果变量x = 10的大小,您可能希望坚持使用.get(). .post()和.get()方法都是.ajax()方法的扩展或依赖于.ajax()方法. .ajax()方法更灵活,因为它为您提供了更多选项,例如指定数据格式(JSON或纯文本)的能力,发送用户名/密码以及请求,在同步或异步之间进行选择请求,以及浏览器是否应该缓存请求.
jQuery.get(url,[data],[callback(data,textStatus,XMLHttpRequest)],[dataType])
如果您要使用GET将数据发送到Drupal / PHP,使用上面的示例,您可以执行以下操作:
<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>
请注意,.get()方法中data参数的使用是可选的,在我的示例中,我省略了它,但通过连接数据以将其传递给Drupal / PHP与URL的其余部分实现了相同的效果.
如果我要运行它,HTTP GET请求将如下所示:
http://www.alexanderallen.name/my_custom_callback/alexander/10/20
并且响应看起来像:
嗨亚历山大,X Z = 30
将数据从Drupal传递到JavaScript
为此,你会使用行为,我不会进入细节,因为我认为这不是你的问题,但你可以去Drupal 6行为here的官方文档.