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

时间:2011-09-20 14:55:27

标签: javascript jquery ajax image-gallery

Hello stackoverflow-errs, 我构建了一个ajax图像库,并使用asual'jquery地址进行深层链接。 在加载图库后,在第一次点击图片或缩略图的所有点击时,就会发生错误。

基本上,我在图片上的代码是:

<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之前出现“第0行的堆栈溢出”,因此我很困惑它可能来自何处。单击错误消息后,没有任何反应,再次单击图像后,库实际上工作。但是,如果我单击缩略图,则会出现错误,但如果再次单击缩略图,则仍会显示错误。

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

任何人都有关于我应该搜索的位置的提示吗?

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

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

1 个答案:

答案 0 :(得分:1)

来自原始海报:

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

为了跟踪专辑标题而不是必须在我的每个ajax调用中获取它,我将其保存在一个不可见的文本输入中:

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

如果标题在隐藏的输入中有双倍空格,那么IE就是抱怨......对我来说,这没有任何意义,但现在它有效......

感谢各位有识之士!希望这有助于其他人调试IE ....