ajax%-wildcard网址设置参数时给出404错误 -- ajax 领域 和 routes 领域 drupal 相关 的问题

Ajax %-wildcard URL giving 404 error when setting a parameter


5
vote

问题

中文

我有一个下拉目的页面。当您单击Ajax加载内容的下拉目时。我想为填充做同样的事情,所以我在我的模块中创建了一个ajax-url:

  function selectexamfeature_menu() {   $items = array();   $items['selectexamfeature/ajax-replace-breadcrumb/%'] = array(       'title' => 'Ajax-Callback for replacing breadcrumb',       'page callback' => 'selectexamfeature_ajax_callback',       'page arguments' => array(2),       'access arguments' => array('access content'),       'type' => MENU_CALLBACK,   );   return $items; }  function selectexamfeature_ajax_callback($url){   $commands = array();     // later on the $url will be used here for generating the breadcrumb html   $ret = $url;   $commands[] = ajax_command_html('.page-breadcrumb', $ret);   $page = array('#type' => 'ajax', '#commands' => $commands);   ajax_deliver($page); }   

和我的javascript代码我有:

    var custom_settings = {};   custom_settings.url = '/selectexamfeature/ajax-replace-breadcrumb/SOMELINKASSTRING';   custom_settings.keypress = false;   custom_settings.prevent = false;   Drupal.ajax['custom_ajax_action'] = new Drupal.ajax(null, $(document.body), custom_settings);    Drupal.behaviors.selectexamfeature_ajax_replace_breadcrumb = {     attach: function (context, settings) {       $( "#edit-field-text-grade-tid" ).change(function() {         // the event...       });     }   };   

所以最后我想得到我 $ret 变量中的 SOMELINKASSTRING 。但是,现在我一直得到404个错误:

发生了一个ajax HTTP错误。 HTTP响应代码:404 debugg信息如下:/ selectexamfeature / ajax-replace-breadcrumb / somelinkasstring statustext:未找到...

我相信这个问题是在通配符部分。不知怎的,它不会正确替换它。

如果我离开 % 离开,也是 99887665 它没有问题。但我肯定需要参数知道请求哪个页面。

还看这个令人敬畏的文章< / a>但它没有帮助。

英文原文

I have a page with a dropdown. When you click on that dropdown that content is loaded by Ajax. I would like to do the same for the Breadcrumb, so I created an Ajax-URL in my module:

function selectexamfeature_menu() {   $items = array();   $items['selectexamfeature/ajax-replace-breadcrumb/%'] = array(       'title' => 'Ajax-Callback for replacing breadcrumb',       'page callback' => 'selectexamfeature_ajax_callback',       'page arguments' => array(2),       'access arguments' => array('access content'),       'type' => MENU_CALLBACK,   );   return $items; }  function selectexamfeature_ajax_callback($url){   $commands = array();     // later on the $url will be used here for generating the breadcrumb html   $ret = $url;   $commands[] = ajax_command_html('.page-breadcrumb', $ret);   $page = array('#type' => 'ajax', '#commands' => $commands);   ajax_deliver($page); } 

and in my Javascript code I have:

  var custom_settings = {};   custom_settings.url = '/selectexamfeature/ajax-replace-breadcrumb/SOMELINKASSTRING';   custom_settings.keypress = false;   custom_settings.prevent = false;   Drupal.ajax['custom_ajax_action'] = new Drupal.ajax(null, $(document.body), custom_settings);    Drupal.behaviors.selectexamfeature_ajax_replace_breadcrumb = {     attach: function (context, settings) {       $( "#edit-field-text-grade-tid" ).change(function() {         // the event...       });     }   }; 

So at the end I want to get the SOMELINKASSTRING in my $ret variable. But for now I just get a 404 error all the time:

An AJAX HTTP error occurred. HTTP response code: 404 Debugg information follows: /selectexamfeature/ajax-replace-breadcrumb/SOMELINKASSTRING Statustext: Not Found...

I believe the issue is in the wildcard section. Somehow it does not replace it correctly.

If I leave the % away and also the SOMELINKASSTRING it works without issues. But I for sure need the parameter to know which page is requested.

Also watch this awesome article but it did not help either.

     
   
   

回答列表

2
 
vote

如果表单是标准Drupal表单的一部分,则可以使用内置在Ajax系统中的Drupal。这里有一个详细说明: ajax表单在drupal 7 中。基本上它应该是这样的。

  function hook_some_form($form, &$form_state) {   // Create a frop down   $form['some_select'] = array(     '#type' => 'select',     '#options' => $options,     '#default_value' => $default,     '#ajax' => array(       'callback' => 'some_ajax_callback', // This is the php function to be called       'wrapper' => 'some_wrapper', // The javascript #id to put content in.       'method' => 'replace', // Content placement option     ),   );    // Result contents container   $form['some_wrapper'] = array(     '#type' => 'item',     '#id' => 'some_wrapper',     '#tree' => TRUE,   ); }   

和php回调

  function some_ajax_callback($form, $form_state) {   // Fetch the value AJAX gave us.   $value = $form_state['values']['some_select'];    // Recreate the wrapper as we overwrite the old one.   $form['some_wrapper'] = array(     '#type' => 'item',     '#id' => 'some_wrapper',     '#tree' => TRUE,   );    // Append the value of the drop down to it.   $form['some_wrapper']['value'] = array(     '#type' => 'item',     '#markup' => check_plain($value);   );   // Return everything to Javascript.   return $form['some_wrapper'] }   

这允许您将表单值传递给PHP进行处理。

 

If the form is part of a standard Drupal form, you can use Drupal's built in AJAX system. There is a detailed explanation here: Ajax Forms in Drupal 7. Basically it should look like this.

function hook_some_form($form, &$form_state) {   // Create a frop down   $form['some_select'] = array(     '#type' => 'select',     '#options' => $options,     '#default_value' => $default,     '#ajax' => array(       'callback' => 'some_ajax_callback', // This is the php function to be called       'wrapper' => 'some_wrapper', // The javascript #id to put content in.       'method' => 'replace', // Content placement option     ),   );    // Result contents container   $form['some_wrapper'] = array(     '#type' => 'item',     '#id' => 'some_wrapper',     '#tree' => TRUE,   ); } 

And for the PHP callback

function some_ajax_callback($form, $form_state) {   // Fetch the value AJAX gave us.   $value = $form_state['values']['some_select'];    // Recreate the wrapper as we overwrite the old one.   $form['some_wrapper'] = array(     '#type' => 'item',     '#id' => 'some_wrapper',     '#tree' => TRUE,   );    // Append the value of the drop down to it.   $form['some_wrapper']['value'] = array(     '#type' => 'item',     '#markup' => check_plain($value);   );   // Return everything to Javascript.   return $form['some_wrapper'] } 

This allows you to pass form values to PHP for processing.

 
 
     
     
0
 
vote
vote
最佳答案
 

我用drupal钩子解决了它。所以我使用已经存在的ajax触发器。

  function selectexamfeature_theme($existing, $type, $theme, $path) {   return array(     'breadcrumb' => array(       'template' => 'breadcrumb',     ),   ); }   

  function selectexamfeature_views_ajax_data_alter(&$commands, $view) {  ...  // building the url variable  ...  $vars = array();  themename_generate_breadcrumb($vars);  $markup = theme('breadcrumb', array('breadcrumb' => drupal_get_breadcrumb()));  $commands[] = ajax_command_replace('div.page-breadcrumb', $markup); }   

这按预期的工作。

 

I solved it with drupal hooks. So I use an already existing Ajax trigger.

function selectexamfeature_theme($existing, $type, $theme, $path) {   return array(     'breadcrumb' => array(       'template' => 'breadcrumb',     ),   ); } 

and

function selectexamfeature_views_ajax_data_alter(&$commands, $view) {  ...  // building the url variable  ...  $vars = array();  themename_generate_breadcrumb($vars);  $markup = theme('breadcrumb', array('breadcrumb' => drupal_get_breadcrumb()));  $commands[] = ajax_command_replace('div.page-breadcrumb', $markup); } 

This works as intended.

 
 

相关问题

0  输出视图_embed_view到Ajax内容  ( Output views embed view to ajax content ) 
我有一个视图块。我可以用 views_embed_view 函数打印内容,传递 $ display_id ,上下文过滤器等。 现在我希望用户单击图像中的一个点,并使用JavaScript,显示DIV中的块。因此,当用户单击图像的不同坐标时,我在该DIV中显示了不同的产品详细信息。 这应该可以使用ajax( $(#di...

1  使用ajax回调更改另一个输入字段  ( Change another input field with ajax callback ) 
我有一个带文本字段的现有节点。我想用ajax改变另一个字段;如果我在文本字段中输入文本,我需要此文本将显示在另一个文本字段中。我实现了 hook_form_alter() 使用#ajax回调,它适用于正常,但是当我删除此文本并在同一个字段中写入另一个值时,另一个字段不会随#ajax_callback更改。我猜我的aj...

3  如何在模态打开的表单中执行操作?  ( How to perform action from form opened in modal ) 
我有一个表单,其中我有一个链接,它与另一个表单打开模态窗口(,如将块添加到区域)。 我想在提交期间对 opened/second/modal 形式的操作进行操作,但我也想告诉当前窗口关闭模态并达到特定按钮(这是ajaxified和它将重建表格,以便通过第二种形式进行的更改将以主形式可见 - 它们基于相同的数据源)。 ...

0  ajax函数未返回任何HTML  ( Ajax function not returning any html ) 
我正在尝试在Drupal模块中开发一个Ajax进程。这是代码: function My_Module_menu() { $items = array(); $items['route/to/ajax/%'] = array( 'page callback' => '_MY_MODULE_proc...

0  使用自动完成过滤器的两个视图显示不会显示结果  ( Two views with autocomplete filters display no result ) 
我有2个视图 - 具有自动完成过滤器的块,两个过滤器都是标题字段。自动完成过滤器显示在同一页面上的视图时不会显示结果。 如何让他们彼此不冲突? 我使用这个模块 autocomplete筛选器 ...

2  “点击显示”文本在页面[关闭]  ( Click to show text at pages ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...

0  如何在Managed_file中替换文件上传的Ajax回调?  ( How to replace ajax callback of file upload in managed file ) 
我有一个文本区域内部内容。我有另一个表单元素,即上传xls文件。现在我想要实现的是,当我点击上传按钮时,XLS文件内容应该替换文本区域内容。 username = digitaloceanadmin password = password host = nameofmydbcluster.db.ondigita...

1  通过AJAX发送的图像,保存到数据库但未显示在节点上  ( Images sent via ajax saved to database but not shown on the node ) 
我有这个奇怪的问题。我一直在开发这个PhoneGap应用程序,现在在测试阶段,这是噩梦开始的地方。我能够成功上传编码为Base64字符串的图像,检索其FID并将其保存到数据库。请参阅下面的屏幕截图。但是,它就像FID没有与NID相关联。编辑:我刚刚看了看,在field_data_field_name中没有问题没有问题...

3  如何为Ajax提交按钮启用JavaScript表单验证?  ( How can i enable javascript form validation for ajax submit buttons ) 
drupal 8附带客户端JavaScript表单验证;但是,对于带#ajax的提交按钮,它被禁用。如何启用它? ...

3  将#ajax添加到现有表单中  ( Add ajax to an existing form ) 
我正在尝试将 #ajax 属性添加到简单现有内容类型的添加表单。我认为 hook_form_alter 将是去的方式,但下面的代码不会让我来找我正在寻找的更新结果。我基本上重新批评了来自 hook_menu 函数的这个代码,它手动创建字段,在创建时附加 #ajax ,所以我认为代码本身是没问题的。我只是不确定我是否正...

1  附加视图Ajax呼叫(懒惰的负载)与暴露过滤器  ( Attached view ajax call lazy load with exposed filters ) 
我正在使用主视图和附件使用视图,以将2个视图放在一个页面上。每个视图都在它自己的 bootstrap togglable选项卡。因为我不知道有多少人实际将切换到非默认选项卡,我想等待加载该视图,直到需要它,然后通过Ajax加载它。 是否有任何方法可以在ui视图中执行此操作,或者是定制编码的时间吗? 这篇文章是旧的,...

1  Ajax回调在选择框改变事件时不再第二次工作  ( Ajax callback on select box change event not working on second time ) 
我在自定义模块中使用表单API构建表单。应根据下拉列表的所选值填充某些字段。 用户将根据应该填充哪个其他字段的预先输入的配置文件。 我在选择框上使用了Ajax回调,它第一次正常工作。但下次没有工作。 - View: Available concerts operas ballets pages: Video m...

0  为什么Ajax寻呼机在未记录历史记录的视图中  ( Why is ajax pager in views not recording the history ) 
我有一个新闻的列表,与视图模块在drupal 7中。我已激活在高级部分中使用Ajax。所以现在,寻呼机平滑地加载内容,而无需加载其他页面。那很好,但寻呼机没有录制浏览器的历史记录,所以当我达到几页相同的清单时,它完全加载所有内容,但是当我点击浏览器的 back键时,而不是将上一页点击列表,转到先前访问过的网站,甚至是...

0  通过ajax添加2个表单元素[复制]  ( Add 2 form elements to form via ajax ) 
这个问题已经在这里有答案: 我可以使用ajax来定位多个表单元素一个输入? (3个答案) ...

0  如何检测导致Ajax回调的控制?  ( How can i detect what control caused ajax callback ) 
我有一个包含一个表的表单,它从数据库表中显示行,并具有一系列可编辑字段,这一切都正常工作。 我现在想做一个字段触发更改时的Ajax回调,并回调更新同一行中的另一个字段。 可以检查最新字段的哪个实例触发回调,因此它知道哪一行更新? 感谢您的帮助,新年快乐! james ...

0  如何在大多数网站上获得自动完成表现?  ( How can i get autocomplete behave as in most of the sites out there ) 
我有一个用 FORM Api 构建的表单。它有一个文本字段,具有自动完成。 我还有另一种形式,有几个字段,其中一些是自动完成的。 它运行良好,但我必须按两次Enter键以发送表格。 第一个输入键是选择一个项目。 第二个ENTER键将所选项目发送到进程。 在野外,我在野外看到的行为,习惯了数千千万个网站,这是: 如果...

2  通过AJAX更新价格  ( Update price via ajax ) 
我创建了一种引用产品内容类型(Sub Prod)的内容类型(主产品)。子产品也引用了另一个名为(选项集)的产品内容类型,这将是该产品的选项集,随着商业产品捆绑的使用,我能够将所有不同价格的子产品和选项集的所有价格组合起来通过使用商务产品属性,我能够将选项集更改为列表文本字段。 我应用了我所看到的补丁来计算推车和结账...

1  如何以表格调试AJAX?  ( How to debug ajax in form ) 
我有一个使用ajax提交"方法" 的表单,ajax提交处理程序以完整的形式返回ajax响应(表单在其自身之外具有ajax包装,所以没有问题),它不适用于匿名用户。我只在此时使用dynamic_page_cache。 我正在通过现场格式模板显示此表单,我在实体上(想象评论表格),我正在使用Lazy Builder。 是...

0  如何从php到js - 并保持更新的变量?  ( How to expose variable from php to js and keep it updated ) 
drupal_add_js正常运行从php到javascript的变量,并且有很多示例。但我希望没有新页面请求的变量更新。 我有一个页面请求,它在后台踢掉一些长期运行的代码(使用 background_batch 和批量API),在此期间偶尔更新变量。当它发生变化时,再次调用drupal_add_js没有任何操作。...

0  Ajax重建表单正在从我的表单函数中调用所有代码  ( Ajax rebuild form is calling all the code from my form function ) 
我有一个表单,当我单击无线电重建相同形式的元素时。不知何故,当AJAX被称为它从表单函数中回忆起一切。 我如何强迫他只重新加载代码的一部分,在这种情况下$表格['容器'] ['网络']而不是全部$表格。 在回调期间必须有一些奇怪的行为,可以重新加载整个形式并获得它想要的部分,然后通过新的替换旧的? $form['...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.