【问题标题】:Drupal $get not returning full HTMLDrupal $get 不返回完整的 HTML
【发布时间】:2015-09-08 08:56:21
【问题描述】:

我已经编写了一个 Drupal 模块,我试图在其中通过 $get 调用 .module 文件。它正常工作。但它正在返回整个 HTML 页面。我尝试了 drupal_json_output,因为我正在研究 drupal -7。我也尝试过使用 getJSON,但是它根本停止给我任何响应。请帮忙

这是我的 .module 文件

<?php

/**
* Implementation of hook_init().
*/
function ajax_privacy_init() {
  drupal_add_js(drupal_get_path('module','ajax_privacy').'/userprivacy.js');
}

/**
* Implementation of hook_menu().
*/
function ajax_privacy_menu() {

  $items = array();

  $items['user/%'] = array(
    'title' => 'menu privacy',
    'page callback' => 'ajax_privacy_get_html', // Render HTML
    'page arguments' => array(2),
    'type' => MENU_CALLBACK,
    'access arguments' => array('access content'),
  );
  return $items;
}
/**
 * Callback to return JSON encoded data.
 */
function ajax_privacy_get_html($arg) {

 $array['text'] = $arg;
 die(drupal_json_output($array));

}

这是我的 .js 文件

// Jquery wrapper for drupal to avoid conflicts between libraries.
(function ($) {
  // Jquery onload function.

    Drupal.behaviors.ajax_privacy = {
    attach: function (context, settings) {
    // Your JS code.

    user_id_ajax=urldetect();

    if(user_id_ajax!=-1)
    ajax_request='user/'+user_id_ajax;

    //alert(ajax_request);
    $.get('',{q:ajax_request},ajaxAction);

    return false;
    }
    };

  ajaxAction=function(response){
    alert(response);
  };

  urldetect=function()
  {
  current_url=window.location.href;
  //alert(current_url);

  user_id_temp=-1;
  slash_temp=-1;

  if(current_url.search("user/")!=-1)
  {
  user_id_temp=current_url.substring(42);
  slash_temp=user_id_temp.search("/");
  if(slash_temp!=-1)
  {
  user_id_temp=user_id_temp.substring(0,slash_temp);
  }

  }

  return(user_id_temp);
  };

})(jQuery); 

【问题讨论】:

  • 如果我进行任何更改,我也会清除 drupal 缓存
  • 在drupal中你的输出是json,尝试在调用时在js文件中添加'json'关键字会是这样的$.get(full_url,function(data){},'json ');查看你的 js 文件 $.get('',{q:ajax_request},ajaxAction,'json');

标签: javascript jquery ajax drupal drupal-7


【解决方案1】:
// Jquery wrapper for drupal to avoid conflicts between libraries.
(function ($) {
  // Jquery onload function.

    Drupal.behaviors.ajax_privacy = {
    attach: function (context, settings) {
    // Your JS code.

    user_id_ajax=urldetect();

    if(user_id_ajax!=-1)
    ajax_request='user/'+user_id_ajax;

    //alert(ajax_request);
    //try adding 'json' in your $.get call
    $.get('',{q:ajax_request},ajaxAction,'json');

    return false;
    }
    };

  ajaxAction=function(response){
    alert(response);
  };

  urldetect=function()
  {
  current_url=window.location.href;
  //alert(current_url);

  user_id_temp=-1;
  slash_temp=-1;

  if(current_url.search("user/")!=-1)
  {
  user_id_temp=current_url.substring(42);
  slash_temp=user_id_temp.search("/");
  if(slash_temp!=-1)
  {
  user_id_temp=user_id_temp.substring(0,slash_temp);
  }

  }

  return(user_id_temp);
  };

})(jQuery); 

【讨论】:

  • 感谢 Vishwa 的回复。但它没有工作:(
  • 嗨,我看到 $.get(' ',{q:ajax_request},ajaxAction,'json');没有 url 可以调用 add page url as $.get(' url ',{q:ajax_request},ajaxAction,'json'); url 必须是完整的 url 示例 yoursite.com/user/1 url 将是您在 hook_menu 中定义的内容
  • 更多解释可以参考以下链接w3schools.com/jquery/ajax_get.asp
【解决方案2】:

在 true 处添加访问回调:

$items['user/%'] = array(
    'title' => 'menu privacy',
    'page callback' => 'ajax_privacy_get_html', // Render HTML
    'page arguments' => array(2),
    'type' => MENU_CALLBACK,
    'access arguments' => array('access content'),
    'access callback' => TRUE // add this line
  );

试试这个:

function ajax_privacy_get_html($arg) {

 $array['text'] = $arg;
 print json_encode($array);
 exit();
}

【讨论】:

  • 会试试这个解决方案..谢谢
  • 好的,如果这正是你想要的,请告诉我们:)
猜你喜欢
  • 2017-06-02
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2019-07-21
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多