Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 通过hook_菜单调用Drupal 7 AJAX_Php_Javascript_Drupal_Ubercart - Fatal编程技术网

Php 通过hook_菜单调用Drupal 7 AJAX

Php 通过hook_菜单调用Drupal 7 AJAX,php,javascript,drupal,ubercart,Php,Javascript,Drupal,Ubercart,因此,每当有人选择新的配送选项时,我都会尝试更新Ubercart结帐页面上的新窗格。到目前为止,我可以让这种情况发生在每次我刷新页面后,选择了一个新的航运选项。下一步是通过AJAX使其工作 我的问题是ajax命令不是从ajax回调中发出的。未更新div。现在我只有一些简单的文字。稍后,我将添加我需要的实际表单信息,这将是另一个问题。然而,我甚至不能让这个测试用例工作 我正在为Drupal的Ubercart FedEx模块开发一项新功能。我已经在这方面工作了一段时间,但没有结果。我试过很多不同的方

因此,每当有人选择新的配送选项时,我都会尝试更新Ubercart结帐页面上的新窗格。到目前为止,我可以让这种情况发生在每次我刷新页面后,选择了一个新的航运选项。下一步是通过AJAX使其工作

我的问题是ajax命令不是从ajax回调中发出的。未更新div。现在我只有一些简单的文字。稍后,我将添加我需要的实际表单信息,这将是另一个问题。然而,我甚至不能让这个测试用例工作

我正在为Drupal的Ubercart FedEx模块开发一项新功能。我已经在这方面工作了一段时间,但没有结果。我试过很多不同的方法,但都不管用

说得很清楚。。。我知道ajax调用正在启动。我甚至可以将一个success附加到ajax$.get调用并获得控制台输出,然后设置drupal变量。只有div replace代码不起作用。这个拼图的所有其他部分都起作用了

我转到ajax调用并返回javascript。我甚至可以在JS中的ajax调用上附加一个success函数,并在成功时获得控制台输出。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;
}
//实现hook\u菜单()
功能uc_联邦快递_菜单(){
$items=array();
$items['uc\u fedex\u jquery\u callback/%']=array(
'title'=>'My Custom Callback',
“说明”=>“博客列表”,
“页面回调”=>“uc\u联邦快递\u日历\u jquery\u回调”,
“页面参数”=>数组(1),
“访问参数”=>数组(“访问内容”),
“访问回调”=>TRUE,
“键入”=>菜单\u回调,
);
退回$items;
}
//AJAX回调:更新日历
//这就是错误所在。。。变量已设置
//但div内容从未被替换。
函数uc\u fedex\u calendar\u jquery\u callback($argument){
变量集('uc\U fedex\U发货类型',$参数);
$commands[]=ajax_command_replace('fromdate','works');
返回数组('#type'=>'ajax','#commands'=>$commands);
}
//日历窗格的实际用户界面
功能uc_联邦快递_uc_结帐_窗格_发货日期($op,$order,$form=NULL,&$form_state=NULL){
交换机($op){
案例“视图”:
//在不更改Ubercart Core的情况下检查装运报价选项。
//$.get行进行hook\u菜单调用,然后
//对出现问题的上述函数进行回调
drupal_添加_js(“
jQuery(函数($){
$(文档).ready(函数(){
last='o';
setInterval(函数(){
$('#quote input:radio:checked')。每个(函数(){
if($(this.val()!=last){
last=$(this.val()
$.get('https://www.fdanconia.com/uc_fedex_jquery_callback/'+$(this.val());
}
});
}, 500);
});
});“,‘内联’);
$contents['calendar']=数组(
“#键入”=>“文本字段”,
“#title”=>t(“选择您的预计到达日期”),
“#默认值”=>date('m/j/Y',$response[1]),
“#前缀”=>”,
“#后缀”=>”,
);
返回数组('description'=>$description,'contents'=>$contents);
}
}
//实现钩子检查窗格()。
功能uc_联邦快递uc_结帐窗格(){
$panes['calendar']=数组(
“回调”=>“uc\u联邦快递\u uc\u结帐\u窗格\u发货日期”,
“标题”=>t(“装运日历”),
'desc'=>t('允许客户选择发货日期的日历'),
“进程”=>TRUE,
);
返回$panes;
}
关于js的说明, jQuery(函数same_func(){})等价于$(document).ready(函数same_func(){})

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

在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/控制台以查看是否正在调用$.get


另一个调试是在uc_fedex_calendar_jquery_callback()中使用php的error_log(“message”),并查看apache error.log。

我在响应回调中添加了所需的参数,然后在原始调用的AJAX响应中处理这些参数。我只是使用jQuery手动使用更新的变量数据操纵DOM。我不认为有一种方法可以在不改变Ubercart核心的情况下实现这一点,这是不可接受的


如果有人想要我用来解决这个问题的代码,只要问一下,你就会收到。(有点长,但如果有人需要,我会在这里发布。)

嗯。。。你显然没有读我的问题。我完全了解如何在Drupal上下文中使用jQuery,在执行javascript代码时没有任何问题。问题在于来自hook_菜单的ajax调用。$。get正在被调用。。。正如我在问题中两次明确指出的那样。