Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 陷入奇怪的jQuery错误_Javascript_Jquery_Fancybox_External - Fatal编程技术网

Javascript 陷入奇怪的jQuery错误

Javascript 陷入奇怪的jQuery错误,javascript,jquery,fancybox,external,Javascript,Jquery,Fancybox,External,好的,这是我的代码,它存储在一个外部js文件中,并正确地包含在head部分的主html中 $(document).ready(function(){ var checkForConfirmation = function(){ for(var i=0; i<myOrders.length; i++){ $.ajax({ type: "GET", url: "orderStatus.php",

好的,这是我的代码,它存储在一个外部js文件中,并正确地包含在head部分的主html中

$(document).ready(function(){
    var checkForConfirmation = function(){
    for(var i=0; i<myOrders.length; i++){
        $.ajax({
            type: "GET",
            url: "orderStatus.php",
            data: {action: 'get', id: myOrders[i]},
            success: function(data){
                if (data){
                    var reply = jQuery.parseJSON(data);
                    $("#fancyAlertLink").fancybox().trigger('click');
                    myOrders.splice(myOrders[i], 1);
                }
            }
        });
        if (myorders.length == 0){
            clearInterval(waitForRestourantInterval);
        }
    }
}
if (myOrders.length > 0){
    var waitForRestourantInterval = setInterval(function(){checkForConfirmation()}, 5000);
}
});
主html文件:(smarty+html,smarty{literal}标记在本文中被忽略)


var myOrders=新数组();
{foreach from=$smarty.session.my_orders item=id}
myOrders.push({$id}):
{/foreach}
$(文档).ready(函数){
$(“#fancyAlertLink”).fancybox();
});
---这里有一些内容---
Fancybox地狱耶!!!

按预期设置时间间隔和AJAX工作。当我点击“ShowFancy”链接时,fancybox会显示出来。但它不会从外部js触发。我调试了它。它应该可以工作,它执行该行,但是没有出现任何东西试图触发对元素的单击,例如
$('fancyAlertLink')。trigger('click')

尝试触发对元素的单击,例如
$('fancyAlertLink')。触发('click')

这里有一个问题:当您在“for”循环中设置这些AJAX调用时,“success”处理程序中的代码引用用于循环迭代的变量“i”。这将是一个大问题,因为所有函数都将引用相同的变量“i”。因此,当函数实际被调用时,当HTTP请求完成时,它们都将看到相同的值“i”(这将是循环运行时“i”的最后一个值)

要解决该问题,请以稍微不同的方式设置“成功”处理程序:

        success: (function(i) {
          return function(data) {
            if (data){
                var reply = jQuery.parseJSON(data);
                $("#fancyAlertLink").fancybox().trigger('click');
                myOrders.splice(myOrders[i], 1);
            }
          };
        })(i)

这样做将确保每个单独的处理程序都有自己的“i”副本,以及一个具有正确值的副本。

这里有一个问题:当您在“for”循环中设置这些AJAX调用时,“success”处理程序中的代码引用用于循环迭代的变量“i”。这将是一个大问题,因为所有函数都将引用相同的变量“i”。因此,当函数实际被调用时,当HTTP请求完成时,它们都将看到相同的值“i”(这将是循环运行时“i”的最后一个值)

要解决该问题,请以稍微不同的方式设置“成功”处理程序:

        success: (function(i) {
          return function(data) {
            if (data){
                var reply = jQuery.parseJSON(data);
                $("#fancyAlertLink").fancybox().trigger('click');
                myOrders.splice(myOrders[i], 1);
            }
          };
        })(i)

这样做将确保每个单独的处理程序都有自己的“i”副本,以及具有正确值的副本。

编辑:可能存在一些问题

  • 您正在将myOrders[i]
传递到
.splice()
。我假设它不包含像
.splice()
这样的索引号

  • i的值
    问题如下所述

  • 即使解决了这两个问题,您仍然有一个问题,因为
    .splice()
    修改了数组,因此任何高于拼接中使用的索引号都是过时的,因为
    .splice()
    正在从数组中删除项目


  • 你正在做:

    myOrders.splice(myOrders[i], 1);
    
    success:
    回调到异步AJAX调用中。当该代码触发时,
    i
    length
    的值相同,因此该索引中没有任何项

    换句话说,最后一项是
    length-1
    ,但是
    i==length
    so
    myOrders[i]==undefined

    一个简单有效的修复方法是将
    myOrders[i]
    设置为AJAX调用的
    context
    参数

        $.ajax({
            type: "GET",
            url: "orderStatus.php",
            context: myOrders[i],
    
    然后在
    success:
    回调中,
    将引用该项

           success: function(data){
                if (data){
                    var reply = jQuery.parseJSON(data);
                    $("#fancyAlertLink").fancybox().trigger('click');
    
                     //  -------------v-----references the proper item
                    myOrders.splice( this, 1);
                }
            }
    

    编辑:可能存在一些问题

    • 您正在将myOrders[i]
    传递到
    .splice()
    。我假设它不包含像
    .splice()
    这样的索引号

  • i的值
    问题如下所述

  • 即使解决了这两个问题,您仍然有一个问题,因为
    .splice()
    修改了数组,因此任何高于拼接中使用的索引号都是过时的,因为
    .splice()
    正在从数组中删除项目


  • 你正在做:

    myOrders.splice(myOrders[i], 1);
    
    success:
    回调到异步AJAX调用中。当该代码触发时,
    i
    length
    的值相同,因此该索引中没有任何项

    换句话说,最后一项是
    length-1
    ,但是
    i==length
    so
    myOrders[i]==undefined

    一个简单有效的修复方法是将
    myOrders[i]
    设置为AJAX调用的
    context
    参数

        $.ajax({
            type: "GET",
            url: "orderStatus.php",
            context: myOrders[i],
    
    然后在
    success:
    回调中,
    将引用该项

           success: function(data){
                if (data){
                    var reply = jQuery.parseJSON(data);
                    $("#fancyAlertLink").fancybox().trigger('click');
    
                     //  -------------v-----references the proper item
                    myOrders.splice( this, 1);
                }
            }
    

    这行代码似乎无效($(“#fancyAlertLink”).fancybox().trigger('click');)这到底应该做什么?@guildsbounty这绝对不是真的。这行代码没有问题。如果从firebug命令行调用$(“#fancyAlertLink”).fancybox().trigger('click'),该怎么办?如果您使用未调用.fancybox()的$函数执行某些操作会怎么样?这就是您通过假装单击打开fancybox模式的方式,如果您删除其上方的行会怎么样?@ZolaKt您可以发布JSON响应的样子吗?该行似乎无效($(“#fancyAlertLink”).fancybox().trigger('click');)这到底是怎么回事?@行会赏金那绝对不是真的。这行代码没有问题。如果从firebug命令行调用$(“#fancyAlertLink”).fancybox().trigger('click'),该怎么办?如果你用$function做了一些不调用.fancybox()的事情怎么办?这就是你如何通过假装点击打开一个fancybox模态,它看起来很好,如果你删除它上面的行怎么办?@ZolaKt