Javascript WordPress中的Ajax调用会导致不需要的页面重新加载并中止fancybox演示
用户填写测验表格并单击“分数测验”链接。我们需要的是统计分数,通过jQueryAjax调用将结果发送到服务器,以及显示用户通知的fancybox 所发生的事情是记录完成,ajax调用启动,页面重新加载。如果我对ajax调用进行注释,fancybox将按需要显示。使用Wordpress 3.4.2 可能发生了什么Javascript WordPress中的Ajax调用会导致不需要的页面重新加载并中止fancybox演示,javascript,wordpress,jquery,Javascript,Wordpress,Jquery,用户填写测验表格并单击“分数测验”链接。我们需要的是统计分数,通过jQueryAjax调用将结果发送到服务器,以及显示用户通知的fancybox 所发生的事情是记录完成,ajax调用启动,页面重新加载。如果我对ajax调用进行注释,fancybox将按需要显示。使用Wordpress 3.4.2 可能发生了什么 jQuery('#checkQuiz').click(function(){ var ajaxurl = '<?php echo admin_url('ad
jQuery('#checkQuiz').click(function(){
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
// tally correct answers
var quizData = tallyScore();
// display user notice
jQuery('a#hiddenAnchor').trigger('click');
// store the data while the user is reading the results display
jQuery.ajax({
type:"post",
url:ajaxurl,
data:quizData
});
return false;
});
报告的文件是jQuery.js,看起来是1.7.2版。我注意到jQuery当前的版本是1.8.1。我想知道这是否是问题的一部分
注2:我忘了提到这段代码是子主题中页面模板的一部分。在web应用程序的其他页面上进行类似的ajax调用也可以正常工作。我在邮件中添加了一个帖子,以防有人没有访问stackoverflow
注3:我使用wordpress“twentyeleven”的标准主题对此进行了测试。同样的错误也发生了。我没有可供测试的选项了。您应该尝试:
jQuery('#checkQuiz').click(function(e){
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
// tally correct answers
var quizData = tallyScore();
// display user notice
jQuery('a#hiddenAnchor').trigger('click');
// store the data while the user is reading the results display
jQuery.ajax({
type:"post",
url:ajaxurl,
data:quizData
});
e.preventDefault()
return false;
});
jQuery('#checkquick')。单击(函数(e){
var ajaxurl='';
//记录正确答案
var quizData=tallyScore();
//显示用户通知
jQuery('a#hiddenAnchor')。触发器('click');
//在用户读取结果显示时存储数据
jQuery.ajax({
类型:“post”,
url:ajaxurl,
资料来源:quizData
});
e、 预防默认值()
返回false;
});
使用e.preventDefault
可以阻止页面重新加载
请注意,我对您的代码做了两处更改。我在回调函数的参数列表中添加了
e
,并在该函数的末尾添加了e.preventDefault
。在测试和分解相关代码后,在传入ajax调用的数据数组中发现了错误。为了帮助任何人寻找类似错误的答案,这里是我在代码中找到的
quizData是为WordPress ajax处理程序构造的数组
找到的代码
var quizData = {
action: 'save_quiz',
item: invoice_item,
lesson: jQuery("#lesson"),
score: ratio };
这段代码有两个问题。首先,jQuery调用将jQuery对象分配给数组值元素“lesson”。这将导致在创建错误条件的数组中出现“未定义”值。这里缺少的是“.val()”函数调用
第二个问题可能是项目的代码体系结构,但数组汇编块中的jQuery调用似乎无法按预期工作。在我的测试中,数据数组包含一个空值
分辨率
var lesson_id = jQuery("#lesson").val();
var quizData = {
action: 'save_quiz',
item: invoice_item,
lesson: lesson_id,
score: ratio };
我希望这对某人有所帮助。好主意!不幸的是,我没有快乐。我在这里试过了,在
e.preventDefaut()的末尾加了一个分号代码>来自服务器的格式错误的ajax响应是否会导致页面重新加载?请尝试删除可能导致页面重新加载的“jQuery('a#hiddenAnchor').trigger('click');”谢谢您花时间提供建议。我按照你的建议做了,但是重新装填还是发生了。目前,我正在考虑jQuery版本的概念,以及数据可能包含一些愚蠢的东西。
var lesson_id = jQuery("#lesson").val();
var quizData = {
action: 'save_quiz',
item: invoice_item,
lesson: lesson_id,
score: ratio };