将可变数据从 JavaScript 传递到 Drupal/PHP 是一回事。将信息从 Drupal/PHP 传递到 JavaScript 是另一回事。我认为你的意思是你的问题中的第一个。所以我会继续回答这个问题。
将变量从 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,
);
让我们分解上面的例子。
$items['my_custom_callback/%']
$items 只是一个数组,可以任意命名。如果我的网站的 URL 是 www.alexanderallen.name,那么 @987654322@ 将是我将从我的 JavaScript 应用程序调用的资源。
在数组的键中,单词my_custom_callback后面的百分比符号是一个占位符。这是您将数据从 JS 传递到 PHP 的地方。因此,如果变量 x 的值为 10,则来自 JQuery 的调用将如下所示:
@987654323@
当您加载该 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',
'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;
}
?>
如果您想将多个变量从 JQuery 传递到 Drupal/PHP,您可以考虑在 JavaScript 中对它们进行 JSON 化,然后再将其传递给 PHP。请记住,如果有效负载非常大,您应该考虑使用 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',
'description' => 'Listing of blogs.',
'page callback' => 'my_custom_php_function',
'page arguments' => array(1, 2, 3),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
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(),请记住,post 请求将允许比 get 请求更大的数据负载。因此,如果变量 x = 10 的大小,您可能需要坚持使用 .get()。 .post() 和 .get() 方法都是 .ajax() 方法的扩展,或者依赖于 .ajax() 方法。 .ajax() 方法更灵活,因为它为您提供了更多选项,例如指定数据格式(JSON 或纯文本)、随请求发送用户名/密码、选择同步或异步请求,以及浏览器是否应该缓存请求。
这是 JQuery .get() 方法的方法签名:
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 请求将如下所示:
@987654328@
响应如下:
Hi Alexander, X + Z = 30
将数据从 Drupal 传递到 JavaScript
为此,您将使用行为,我没有详细说明,因为我认为这不是您的问题,但是您可以转到 Drupal 6 行为here 的官方文档。