Joomla模块中的jQuery AJAX
我已经成功地将AJAX添加到Joomla模块中(请参阅此处,了解我如何实现它的一个非常不完善的实现) 我的问题是返回错误,当我到目前为止抛出错误时,我只是抛出了一条JApplication消息,例如Joomla模块中的jQuery AJAX,jquery,ajax,joomla,joomla2.5,Jquery,Ajax,Joomla,Joomla2.5,我已经成功地将AJAX添加到Joomla模块中(请参阅此处,了解我如何实现它的一个非常不完善的实现) 我的问题是返回错误,当我到目前为止抛出错误时,我只是抛出了一条JApplication消息,例如 JFactory::getApplication()->enqueueMessage('Some error message', 'error'); 然而很明显,这并没有让AJAX嗅到任何错误,所以每当我提交它时,它都称之为“成功”。这就是我的问题 太多我喜欢的用户仍然没有启用Javascr
JFactory::getApplication()->enqueueMessage('Some error message', 'error');
然而很明显,这并没有让AJAX嗅到任何错误,所以每当我提交它时,它都称之为“成功”。这就是我的问题
太多我喜欢的用户仍然没有启用Javascript,我很高兴只添加一个直接的400头重定向(在任何情况下,我希望向用户显示错误消息)。我仍然希望JApplication在禁用javascript时通过PHP将一条错误消息排队,作为一种回退
我还看到了将错误消息回显到页面上的方法。但是由于Joomla模块处理AJAX的方式不是特别有用,因此回调数据结果实际上是页面的完整html代码!所以我必须在页面上特别选择一个元素,我想如果我这样做的话——我不知道该怎么做/如果可能的话
那么,为AJAX抛出一条错误消息,然后检索它,以便向用户显示它(但仍然保留一个很好的非javascript回退)的最佳方式是什么呢?谢谢 模块不能完全控制应用程序输出,还涉及组件和插件 您需要输出消息队列并关闭应用程序的东西
- 独立组件
- 它将位于模块文件夹中并连接到应用程序
function getMessage($error) {
$app=JFactory::getApplication();
$appReflection = new ReflectionClass(get_class($app));
$_messageQueue = $appReflection->getProperty('_messageQueue');
$_messageQueue->setAccessible(true);
$messages = $_messageQueue->getValue($app);
foreach($messages as $key=>$message) {
if(preg_match('/'.preg_quote($error,'/').'/',$message['message'])) {
$return = $message;
unset($messages[$key]);
}
}
$_messageQueue->setValue($app,$messages);
return $return;
}
使用此方法,可以设置ajax响应,将消息作为单独的数据值包含在其中,供客户端ajax处理程序使用。当用户关闭JS时,服务器上的ajax处理程序永远不会运行此代码,因此该消息显示为正常的系统消息。
<script>
jQuery(window).load(function(){
var data = {};
display_result_data();
});
function display_map_result_data() {
var ajaxUrl = "modules/mod_mapcontent/submit_form.php";
jQuery.ajax({
type: "POST",
url: ajaxUrl,
data: {category: 'simple'},
dataType : "json",
async : false,
success : function(result){
data = result;
}
});
}
</script>
<?php
/**
* @package Joomla.Site
* @subpackage mod_banners
*
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
$baseurl = JURI::base();
?>
<div id="mapcontent" class="mapcontent">
<div id="map-canvas"></div>
</div>
jQuery(window).load(函数(){
变量数据={};
显示结果数据();
});
函数显示\映射\结果\数据(){
var ajaxUrl=“modules/mod\u mapcontent/submit\u form.php”;
jQuery.ajax({
类型:“POST”,
url:ajaxUrl,
数据:{category:'simple'},
数据类型:“json”,
async:false,
成功:功能(结果){
数据=结果;
}
});
}
Joomla javascript对象具有用于此目的的适当函数renderMessages
// available msg types: success, error, notice
var msg = {
error: ['it is an error!<br />', 'it is enother error!'],
success: ['It works!!']
};
Joomla.renderMessages( msg );
//可用消息类型:成功、错误、通知
var msg={
错误:[“这是一个错误!
”,“这是另一个错误!”,
成功:[“它起作用了!!”]
};
Joomla.renderMessages(msg);
在您的功能中:
$app = JFactory::getApplication();
echo new JResponseJson(null, $app->enqueueMessage('Some errormessage','error'));
//close the $app
$app->close();
在javascript中:
success: function(response) {
var jMsgs = response.messages; // You can stack multiple messages of the same type
Joomla.renderMessages(jMsgs);
}
我不一定需要它来连接消息函数!我只是想要一种显示这些信息的方式。如果我需要第二行,将错误消息传递到某个数组中,然后对其进行json_编码,这很好。我只是不知道如何访问json_编码的数据,你可能想做警告或注意,而不是错误。我最近在cli中遇到了一个问题,其中发送了错误页面的完整html。@Elin即使如此,我如何使AJAX失败?我只希望模块中的东西触发AJAX失败-否则我只需要在php中插入一个条件语句,并使用JFactory::getApplication()->getMessageQueue(),我无法在该消息的同时获得“x”符号(在右上角,以删除该页上剩余的消息),如setRedirect之后呈现的消息所示。有没有办法做到这一点?