gpt4 book ai didi

php - Drupal 7 AJAX 通过 hook_menu 调用

转载 作者:行者123 更新时间:2023-11-28 09:51:13 24 4
gpt4 key购买 nike

因此,我试图在 Ubercart Checkout 页面上更新我的新 Pane ,以便每当有人选择新的运输选项时进行更新。到目前为止,每次我在选择新的送货选项后刷新页面时,都会发生这种情况。下一步是通过 AJAX 使其正常工作。

我的问题是 ajax 命令不是从 AJAX 回调中触发的。 div 没有被更新。现在我只有一些简单的文字。稍后,我将添加我需要的实际表单信息,这将是一个完全不同的问题。但是,我什至无法让这个测试用例运行。

我正在为 Drupal 的 Ubercart FedEx 模块开发一项新功能。我已经为此努力了一段时间,但毫无结果。我尝试了很多不同的方法,但没有任何效果。

非常清楚...我知道 ajax 调用正在触发。我什至可以将成功附加到 ajax $.get 调用并获取控制台输出并设置 drupal 变量。只有 div 替换代码不起作用。这个拼图的所有其他部分都有效。

我进行 ajax 调用并返回到 javascript。我什至可以在 JS 中的 ajax 调用上附加一个成功函数,并在成功时获取控制台输出。 JavaScript 不是问题。

// Implements hook_menu()
function uc_fedex_menu() {
$items = array();
$items['uc_fedex_jquery_callback/%'] = array(
'title' => 'My Custom Callback',
'description' => 'Listing of blogs.',
'page callback' => 'uc_fedex_calendar_jquery_callback',
'page arguments' => array(1),
'access arguments' => array('access content'),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}

// AJAX callback: Updates calendar
// THIS IS WHERE THE ERROR IS... the variable is set
// But the div content is never replaced.
function uc_fedex_calendar_jquery_callback($argument) {
variable_set('uc_fedex_shipment_type',$argument);
$commands[] = ajax_command_replace('#fromdate', "works");
return array('#type' => 'ajax', '#commands' => $commands);
}

// Actual UI of Calendar Pane
function uc_fedex_uc_checkout_pane_shipdate($op, $order, $form = NULL, &$form_state = NULL) {
switch ($op) {
case 'view':
// Check for shipping quote option without altering Ubercart Core.
// The $.get line makes the hook_menu call which in turn
// makes the call back to the above function that has the issue
drupal_add_js("
jQuery(function ($) {
$(document).ready(function() {
last = 'o';
setInterval(function() {
$('#quote input:radio:checked').each(function() {
if($(this).val() != last){
last = $(this).val()
$.get('https://www.fdanconia.com/uc_fedex_jquery_callback/'+ $(this).val());
}
});
}, 500);
});
});", 'inline');

$contents['calendar'] = array(
'#type' => 'textfield',
'#title' => t('Choose Your Estimated Arrival Date'),
'#default_value' => date('m/j/Y',$response[1]),
'#prefix' => '<div id="fromdate">',
'#suffix' => '</div>',
);
return array('description' => $description, 'contents' => $contents);
}
}

// Implements hook_uc_checkout_pane().
function uc_fedex_uc_checkout_pane() {
$panes['calendar'] = array(
'callback' => 'uc_fedex_uc_checkout_pane_shipdate',
'title' => t('Shipping Calendar'),
'desc' => t('A calendar to allow customers to choose shipping date.'),
'process' => TRUE,
);
return $panes;
}

最佳答案

关于js的注释,jQuery( function same_func(){} ) 相当于 $(document).ready( function same_func() {} )

因此外部 jQuery() 调用将一个函数绑定(bind)到文档准备就绪。该函数在文档就绪时触发,并将另一个函数绑定(bind)到已触发的文档就绪。

大多数时候,在 Drupal 中,变量 $ 是不附加的,因此您必须显式创建一个将 jQuery 作为 $ 传递的方法(函数)。

(function($){ 

$ available in here

})(jQuery);

Think of the the above as:
(function)(variables) where the function takes a variable $ ..

Or you can think of it like this:

function test ($) {
$(jquery magic).etc()'
}
test(jQuery);

.. 除了函数测试之外,函数调用都包含在“同一”行中。

检查 firebug/console 以查看是否正在调用 $.get。

另一个调试是在 uc_fedex_calendar_jquery_callback() 中使用 php 的 error_log('message') 并观察 apache error.log。

关于php - Drupal 7 AJAX 通过 hook_menu 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com