2012-04-17 57 views
1

在Drupal 7中加載異步數據的最佳方式是什麼?在Drupal 7中使用AJAX加載數據的最佳方式

當然,我用我自己的節點加載我的數據與jQuery。我已經建立了一個自己的menu_hook,它可以在/events之下/events/2012-04-17此頁面也適合正常瀏覽。我檢查是否設置了$_SERVER['HTTP_X_REQUESTED_WITH'],如果它是我返回JSON字符串中的數據並解析數據。

如果我激活了一些緩存技術,可以運行一些麻煩嗎?或者有更好的方法來加載數據?看來這不適用於提升,因爲我用die()殺死了腳本,我還能做些什麼呢?

function my_module_menu() { 
    $items['events'] = array(
     'page callback' => 'event_page', 
     'access callback' => TRUE, 
     'type' => MENU_LOCAL_TASK, 
    ); 
    $items['events/%date'] = array(
     'page callback' => 'event_page', 
     'page arguments' => array(2), 
     'access callback' => TRUE, 
     'type' => MENU_VISIBLE_IN_BREADCRUMB, 
    ); 
    return $items; 
} 

function event_page($date=null) { 
    $build=array(); 
    // add some other "controls" 
    $build['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('Save'), 
    ); 

    if((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 'XMLHttpRequest' == $_SERVER['HTTP_X_REQUESTED_WITH']) || strpos($_SERVER['REQUEST_URI'], '?json')!==FALSE) { 
     header('Cache-Control: no-cache, must-revalidate'); 
     header('Content-type: application/json', true); 
     $json=loadData(); 
     die(json_encode($json)); 
    } 

    return $build; 
} 
+0

Try exit();函數 – niksmac 2012-04-18 03:37:46

+0

@NikhilMohan AFIK是[die](http://php.net/manual/en/function.die.php)退出的別名不是嗎? – rekire 2012-04-18 05:17:58

+0

只需注意其他你需要發送Vary頭文件,以避免瀏覽器顯示緩存的JSON響應,而不是HTML。 – rekire 2013-12-28 11:18:54

回答

0

您可以使用drupal_json_output代替,這將自動更改頁眉所以沒有退出()是必需的。

另一種選擇是使用hook_page_delivery_callback更改該特定路徑上的傳遞迴調並結合$ _SERVER中的數據,然後使用ajax_command返回頁面的有效數組。

第一個選項很容易,我從來沒有嘗試過第二個,但它可能對您的情況太多了。不幸的是,我不知道這些技術是如何與提升一起工作的,但希望其中一個能夠工作。

+0

嗯,我也發現這個選項。但輸出不被緩存。 – rekire 2012-04-25 08:59:20

相關問題