0

为什么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" />
..................
..................
4

2 回答 2

1

您的问题与如何使用 Drupal 返回实际的 JSON非常相似?

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

function ajax_update_node() {
    $result = array('flag' => true);
    drupal_json($result);
    exit;
}
于 2013-04-08T12:42:48.087 回答
0

查看http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_json_output/7并在您的 hook_menu 声明中设置“交付回调”来调用它。

于 2013-04-08T13:30:02.900 回答