Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将jquery变量传递给drupal(ajax)_Php_Drupal - Fatal编程技术网

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赋值是没有意义的。请求完成后,变量和其他所有内容都将消失。