我正在尝试通过Jquery和AJAX处理页面数据。我想向Drupal发送一个字符串,追加另一个字符串,并将其发送回客户端。我得到一个“未捕获的TypeError:无法读取属性'messageLog'的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));
}
答案 0 :(得分:0)
javascript很好,但我不得不对PHP进行一些更改:
1)在聊天记录器菜单中,我删除了访问回调行。
2)我在项目[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();
}
我希望这有助于将来......