所以我有一个基本的评论表格与jQuery表单插件相关(只有成员可以发布,因此没有名称/电子邮件字段):
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="/assets_site/js/jquery.form.min.js"></script>
<script>
$(document).ready(function(){
function ajaxReturn(data) {
var messageContainer = $('.alert-box');
var messageBody = $(data);
messageContainer.html(messageBody);
}// ajaxReturn(data)
$('.member-review').ajaxForm({
success: ajaxReturn
});
});
</script>
</head>
<body>
{exp:channel:entries
channel='products'
limit='1'
disable='categories|member_data|pagination'
}
{exp:comment:form
channel='products'
form_class='member-review'
return='notifications/success'
}
<div class="alert-box">
{!-- Ajax Form Errors --}
</div><!--.alert-box-->
<label for="comment">Tell others what you think</label>
<textarea name="comment" rows="8" class="required" id="comment"></textarea>
<input type="submit" value="Submit">
{/exp:comment:form}
{/exp:channel:entries}
</body>
</html>
并且,出于此演示的目的,我的成功模板不能更简单:
<p>Sumission Successful!</p>
不幸的是,当我提交完整的表格时,没有返回数据。如果我将console.log($(data));
添加到AjaxRetrurn函数中,我会得到一个空字符串。该评论已成功提交到数据库中,只是返回模板似乎并没有做到。
真的不确定为什么会发生这种情况。它正确返回错误消息,而不是成功模板。
ee v2.5.3
更新:这是一个视频,涵盖了我要做的事情的基础知识。我在EE之前成功完成了此操作,所以我想知道他们最近是否更改了某些东西以使其不再起作用?
文档https://github.com/malsup/form提到ajaxform仅准备提交表格,但不提交。运行此操作时会发生什么?:
$('.member-review').on('submit', function(e) {
e.preventDefault();
$(this).ajaxSubmit({
target: '.alert-box'
})
});
我没有使用jQuery表单插件,但是看起来它不如您期望通过ajax的表格)。
但是,对于如此简单的成功消息,确实不需要整个单独的模板。您可以在返回功能中执行此操作:
function ajaxReturn(data) {
$('.alert-box').html('<p>Sumission Successful!</p>');
}
另外,如果您绝对必须使用单独的模板(为了与非JS浏览器或其他任何模板保持一致),则可以使用JQuery load()
函数获取其内容:
function ajaxReturn(data) {
$('.alert-box').load('/notifications/success');
}
第二个选项将导致您的服务器再一次呼叫,但这并不是什么大不了的。如果您想要最好的性能,请选择第一个选项。
更新:如果您的成功功能也返回错误,那呢?
function ajaxReturn(data) {
if (data) {
$('.alert-box').html(data);
} else {
$('.alert-box').html('<p>Sumission Successful!</p>');
}
}
是否确认是否是错误?我也有类似的问题。我有一个正在使用较新的EE版本测试的开发网站,即使确实提交了Ajax帖子,AJAX帖子也永远不会返回成功消息,因为如果我刷新页面,我可以看到更新。在Live网站上,我正在运行一个较旧版本,并获得了成功和响应。直到我找到这篇文章之前,直到我发现服务器上是一件事情。
我还使用模板页面的负载更新,但是如果我可以使用JSON响应,那就不错了,这样我就不必向单独的页面进行额外的调用。这是我在Live(较旧的EE版本)上使用的,并且正常工作。
var update_cart_form_options = {
success: update_cart,
dataType: 'json'
};
function update_cart(data, statusText, xhr, $form) {
if (data.success) {
$("input[name=XID]").val(data.XID);
$('#cart_total') .html( data.cart_total );
$('#cart_subtotal') .html( data.cart_subtotal );
}
return false;
}
$("#update_button").click(function(){
$('#update_button').val('Processing...');
var form = $(this).closest("form");
$(form).ajaxForm(update_cart_form_options);
$(form).submit();
});
但是,使用最新的EE版本在开发站点测试上也无法使用相同的代码。