为什么drupal_json只返回页面HTML?

时间:2013-04-05 02:42:41

标签: php drupal-6 drupal-modules

为什么drupal_json只返回页面HTML?

以下是代码:

PHP:

//Add js
function update_ajax_init(){
   drupal_add_js("....");
}

//Function hook menu of me
function update_ajax_menu(){
$items = array();

  $items['ajax/refresh'] = array(
    'type' => MENU_CALLBACK,  
    'page callback' => 'ajax_update_node',
    'title' => 'Ajax update'
  );
}

//Function main process return data json
function ajax_update_node(){
   return drupal_json(array("flag"=>true));
}

使用Javascript:

$(document).ready(function(){
    $("a.update_node").click(function(){
        var params = {node_id: $(this).atrr("rel")};
        $.ajax(
           type: "POST",
           url:  "ajax/refresh",
           data:  params,
           dataType: "json",
           success: function(response){
               if (response.flag == true){
                   alert("Success");
               }
           }
        );
    });
});

为什么响应值是所有HTML代码而不是json? {'flag'=>true}

来自filefox的回复:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
..................
..................

2 个答案:

答案 0 :(得分:1)

您的问题与How can I return actual JSON using Drupal?

非常相似

看起来你会将它用于某些自动完成功能。无论哪种方式,你的功能ajax_update_node应该是这样的。我也会重命名该函数,因为它看起来像是在实现一个钩子。它与hook_nodeapi非常相似。

function ajax_update_node() {
    $result = array('flag' => true);
    drupal_json($result);
    exit;
}

答案 1 :(得分:0)

查看http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_json_output/7并在hook_menu声明中设置“发送回调”以进行调用。