0

Jquery と AJAX を介してページ データを処理しようとしています。文字列を Drupal に送信し、別の文字列を追加して、クライアントに送り返したいと考えています。「Uncaught TypeError: Cannot read property 'messageLog' of null」というエラーが表示されます

これは私がこれまでに持っているものです。助けてくれてありがとう:

Drupal モジュール:

function exoticlang_chat_log_init(){
drupal_add_js('misc/jquery.form.js');
drupal_add_library('system', 'drupal.ajax');
}

function exoticlang_chat_log_permission() {
   return array('access ExoticLang Chat Log');
}

/**
 * Implementation of hook_menu().
 */
function exoticlang_chat_logger_menu() {
    $items = array();
    $items['chatlog'] = array(
        'title'            => t('ChatLog'),
        'type'             => MENU_CALLBACK,
        'page callback'    => 'exoticlang chat log ajax',
        'access_callback' => 'user_access',
        'access arguments' => array('save chat log')
    );
    return $items;
}

function exoticlang_chat_log_ajax($logData){
    $messageLog= 'Drupal has processed this: '.$logData;
    ajax_deliver($messageLog);
    exit;
}

Javascript:

function sendPrivateMessageLog(privateSessionID, privateChatLog){
    var privateMessageLogJson={'user': myNick, 'chatLog': privateChatLog, 'sessionId': privateSessionID}
    privateMessageLogJson = JSON.stringify(privateMessageLogJson);
    console.log('JSONstringified: ' + privateMessageLogJson);
    jQuery.ajax({
        type: 'POST',
        url: '/chatlog',
        success: exoticlangAjaxCompleted,
        data:'messageLog=' + privateMessageLogJson,
        dataType: 'json'

    });
    return false;
}

function exoticlangAjaxCompleted(data){
    console.log('exoticlangAjaxCompleted!');
    console.log('chat log is: ' + data.messageLog);
    console.log('chat log is: ' + dump(data.messageLog));
    //console.log(dump(data));
}
4

1 に答える 1

0

@Krister Andersson、Firebugを使用するというあなたの提案は、私を正しい方向に向けました。Linux ではうまく動作しないため、通常は使用しません。

JavaScript は問題ありませんでしたが、PHP にいくつかの変更を加える必要がありました。

1) チャットロガーのメニューで、アクセスコールバックの行を削除しました。

2) items[chatlog] ページのコールバックにアンダースコアを追加しました

3) exoticlang_chat_log_ajax では、関数の引数として渡す代わりに $_POST['messageLog'] を使用しました。

4) drupal の ajax_deliver を使用する代わりに、単純に結果をエコーし​​ました。

最終モジュール:

<?php

function exoticlang_chat_log_init(){
drupal_add_js('misc/jquery.form.js');
drupal_add_library('system', 'drupal.ajax');
}

function exoticlang_chat_log_permission() {
  return array(
    'Save chat data' => array(
      'title' => t('Save ExoticLang Chat Data'),
      'description' => t('Send private message on chat close')
    ));
}


/**
 * Implementation of hook_menu().
 */

function exoticlang_chat_logger_menu() {
    $items = array();
    $items['chatlog'] = array(
        'type'             => MENU_CALLBACK,
        'page callback'    => 'exoticlang_chat_log_ajax',
        'access arguments' => 'Save chat data');
        //'access callback' => 'user_access');
    return $items;
}

function exoticlang_chat_log_ajax(){
    $messageLog=$_POST['messageLog'];
    $chatLog= 'Drupal has processed this: '.$messageLog;
    echo $chatLog;
    drupal_exit();
}

これが将来誰かに役立つことを願っています...

于 2012-08-23T05:55:25.157 に答える