另一个IE错误:堆栈溢出在第0行,而使用jquery地址或至少ajax

Another IE bug: stack overflow at line 0, while using jquery address or at least ajax

本文关键字:jquery 地址 ajax 错误 IE 堆栈 栈溢出 0行 另一个      更新时间:2023-09-26

大家好,我建立了一个ajax图片库,并使用jquery地址进行深度链接。在加载图库后,在单击图像时的第一次onclick或所有缩略图的单击时发生错误。

基本上,我在图像上的代码是:
<li id="thumbnail_<?php echo $row->position;?>"><a href="javascript:;" onclick="javascript:setAddress('<?php echo $row->url;?>');"><img src="<?php echo $row->filePath;?>" /></a></li>

我对缩略图的代码是:

<li id="thumbnail_<?php echo $row->position;?>"><a href="javascript:;" onclick="javascript:setAddress('<?php echo $row->url;?>');"><img src="<?php echo $row->filePath;?>" /></a></li>

这样当我点击时,我使用setAddress:

改变地址栏中的地址
<script type="text/javascript">
    function setAddress(address){ 
        $.address.value(address.replace(/^#/, ''));
    }
</script>

,然后我检测地址的变化,并在ajax中重新加载图像(以及相应的缩略图)。

<script type="text/javascript">
    $.address.change(function(event) { 
        checkAnchor();
    }); 
    function checkAnchor(){
        var albumId = <?php echo $albumId;?>;
        if($.address.value() != '' && $.address.value() != '/'){
            //get the id of the image
            var arData = $.address.value().split("-");
            var arIdExt = arData[1].split(".");
            var id = arIdExt[0];
            reloadImage(albumId,id,'0','curr');
        }else{
            reloadImage(albumId,id,'1','curr');
        }
    }
    function reloadImage(albumId, photoId, position, action){
    $("#imgLoading").show();
    var visibleThumbnails = <?php echo $visibleThumbnails;?>;
    var albumName = $("#albumName").val();
    $.post('/montreal/inc/ajax/changeImage.php',{albumId:albumId, photoId:photoId, position:position, action:action}, function(data){
        //data + photoposition=[url]
        var arData = data.split("photoposition=");
        if(position == 0){
            position = jQuery.trim(arData[1]);
        }
        $("#photo-details").html(arData[0]);
        $.address.title(albumName+" - Photo #"+position);
        $("#imgLoading").hide();
        //reload the thumbnails
        if(action == 'next'){               
            var maxThumbnails = <?php echo count($album->arPhotos['photos']);?>;
            var nextPosition = position+1;
            var currentRow = Math.ceil(position/visibleThumbnails);
            if(nextPosition > maxThumbnails){ nextPosition = 1;}                            
            if(position%visibleThumbnails == 0 || position == maxThumbnails){
                reloadThumbnails(currentRow,visibleThumbnails,albumId,nextPosition,'next');
            }else{//fix the activeposition of the reloadThumbnails
                reloadThumbnails(currentRow,visibleThumbnails,albumId,nextPosition,'curr');
            }               
        }else if(action == 'curr'){
            var maxThumbnails = <?php echo count($album->arPhotos['photos']);?>;
            var currentRow = Math.ceil(position/visibleThumbnails);
            reloadThumbnails(currentRow,visibleThumbnails,albumId,position,'curr');
        }
    },"html"  
);

}"第0行堆栈溢出"出现在点击之后和setaddress之前,所以我很困惑它可能来自哪里。点击错误消息后,什么也没有发生,再次点击图像后,图库实际上工作了。但是如果我点击缩略图,错误就会出现,但是如果我再次点击缩略图,错误还是会出现。

据我所知,这个错误是通用的,通常是由循环或递归引起的。但是我看不到,特别是当我看到它只发生在画廊的第一次点击。

谁有提示,我应该在哪里搜索?

错误示例:http://www.ckoi.com/montreal/photos/gala-des-gemeaux-tapis-rouge-194/

编辑:经过一些测试,我意识到这个错误实际上是在我加载页面之后发生的。点击任何地方,都会出现堆栈溢出。所以我更困惑了…但也许是因为我第一次用ajax加载图库?我将调查

原海报:

好的,我找到了。我真的不确定为什么这会给IE带来这样的麻烦,但它是这样的:

为了跟踪专辑标题,并且不必在每次ajax调用中都获得它,我将它保存在一个不可见的文本输入中:

<input id="albumName" type="text" style="display:none;" value="<?php echo $album->name;?>"/>

如果标题在隐藏的输入中有双空格,IE会抱怨…对我来说,这毫无意义,但现在它工作了…

谢谢大家的真知灼见!希望这有助于其他人调试IE....