Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WordPress中的Ajax调用会导致不需要的页面重新加载并中止fancybox演示_Javascript_Wordpress_Jquery - Fatal编程技术网

Javascript WordPress中的Ajax调用会导致不需要的页面重新加载并中止fancybox演示

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

用户填写测验表格并单击“分数测验”链接。我们需要的是统计分数,通过jQueryAjax调用将结果发送到服务器,以及显示用户通知的fancybox

所发生的事情是记录完成,ajax调用启动,页面重新加载。如果我对ajax调用进行注释,fancybox将按需要显示。使用Wordpress 3.4.2

可能发生了什么

    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 };