代码之家  ›  专栏  ›  技术社区  ›  jerrygarciuh

将AJAX调用添加到函数触发的弹出窗口阻止程序

  •  4
  • jerrygarciuh  · 技术社区  · 16 年前

    我最初是打开一个通用的弹出窗口,它根据图像大小调整大小并集中在加载上,但他们不喜欢这种变化,所以我添加了一个PHP脚本来响应大小,并使用jQuery获取大小信息以提供给弹出窗口调用。

    但它似乎延迟,这是引发所有弹出窗口拦截器。

    这是JS

    $("#portfolioBigPic").click(function () {
          var src = $("#portfolioBigPic").attr('src');
          var ar = src.split('/');
          var fname = ar.pop();
          fname = '/g/portfolio/clients/big/' + fname;
    
          $.get("imgsize.php", { i: fname}, function(data){
          var dim = data.split(",");
          popit(fname,dim[0],dim[1]);
      });
    });
    
    function popit(img,w,h) {
      var features = 'width='+w+',height='+h+', toolbar=0, location=0, directories=0, status=0, menubar=0, scrollbars=0, resizable=1,';
      var left = (screen.width/2)-(w/2);
      var top = 0;
      features += 'top='+top+',left='+left;
      bigpic = window.open('portfolioBigPic.php?img='+img, 'bigpic',features);
      bigpic.focus();
    }
    

    避开拦截器和失败之间的唯一区别是我添加了AJAX.get并使用它来指定w和h。

    有没有想过如何避免这种情况?也许我应该使用PHP来获取所有大图片的宽度和高度,并在页面加载时编写一个JS数组?获取数据导致的延迟使阻止程序跳闸,我说得对吗?

    思想?非常感谢您的建议。

    JG公司

    根据Spiky的回答,我需要将popit()调用移出AJAX调用的成功处理程序,以便调用在用户的click事件上下文中发生。

    所以我意识到,当我的小拇指被点击来设置大图片的预览时(portfolioBigPic),我可以在那一点上查看全尺寸的图片。所以我把AJAX大小的查找移到了click()中。

    有人。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Pointy    16 年前

    这不是问题