Jquery 是否防止同时触发多个$.ready()函数?

Jquery 是否防止同时触发多个$.ready()函数?,jquery,json,Jquery,Json,我正在做一个小广告剧本 通过插入以下脚本在页面上插入广告: <script class="gd-ad-script" src="http://domain.dk/ads/gdAds.js?adID=1&x=auto&y=auto&loadAd=?"></script> <script class="gd-ad-script" src="http://domain.dk/ads/gdAds.js?adID=2&x=auto&y=

我正在做一个小广告剧本

通过插入以下脚本在页面上插入广告:

<script class="gd-ad-script" src="http://domain.dk/ads/gdAds.js?adID=1&x=auto&y=auto&loadAd=?"></script>
<script class="gd-ad-script" src="http://domain.dk/ads/gdAds.js?adID=2&x=auto&y=auto&loadAd=?"></script>
<script class="gd-ad-script" src="http://domain.dk/ads/gdAds.js?adID=3&x=auto&y=auto&loadAd=?"></script>
现在,我希望页面打开三个脚本,按顺序为med提供三个警报框。1, 2, 3. 但是,这完全是随机的,因为这完全取决于来自ajax调用的服务器响应速度

结果是,广告以随机顺序排列,而不是1、2、3

我的第一个想法是使用.gd广告脚本:首先作为选择器,这样每个脚本将只处理一个广告,但后来我意识到,这将需要我以某种方式延迟一切,直到删除第一个广告脚本,这是不可取的


有什么好的建议吗?

我认为顺序错误是因为你的脚本没有按照你认为的那样做

您将使用不同的GET参数包含脚本三次

(注意:这将导致浏览器从服务器下载脚本三次,这是不必要的,因为每次都是相同的脚本。)

除非我遗漏了什么(这可能是因为您对
count
变量所做的操作看起来很混乱),否则脚本运行的三次循环都会遍历所有三个
元素,导致它们都处理相同的第一个
元素,因为没有任何东西允许他们识别已经处理过的
元素

我想你应该重新思考你的整个概念:

  • 确保您的脚本只下载一次
  • 或者运行三次,每一次都处理自己的广告,不循环所有的或者运行一次,循环所有的广告
  • 确保在正确的元素后附加广告。这样,AJAX请求恢复的顺序就不重要了
就我个人而言,我不会把剧本写三次,但只写一次,并用其他元素标记广告的帖子。大概是这样的:

<script src="http://domain.dk/ads/gdAds.js"></script>
<div data-ad-id="1" data-ad-x="auto" data-ad-y="auto"></div>
<div data-ad-id="2" data-ad-x="auto" data-ad-y="auto"></div>
<div data-ad-id="3" data-ad-x="auto" data-ad-y="auto"></div>

嗨,罗托拉。。。谢谢你的回答。我自己也想到了这一点,但是在页面上插入广告应该尽可能简单(例如Wordpress中的小部件),我不能依赖添加广告的人,不知道如何在头部插入脚本,也不知道放在哪里。不过,我自己找到了一个解决方案,但是重新安排了添加/删除元素的顺序。我稍后会发布:)
<script src="http://domain.dk/ads/gdAds.js"></script>
<div data-ad-id="1" data-ad-x="auto" data-ad-y="auto"></div>
<div data-ad-id="2" data-ad-x="auto" data-ad-y="auto"></div>
<div data-ad-id="3" data-ad-x="auto" data-ad-y="auto"></div>
$(document).ready(function(){
    var JSONurl = 'http://domain.dk/ads/loadAd.php?callback=?';


    $('[data-ad-id]').each(function(){

        var ad = $(this);
        var adID = ad.data('ad-id');
        var x = ad.data('ad-x');
        var y = ad.data('ad-y');

        var JSONdata = 'domain=' + window.location.hostname + '&adID=' + adID + '&xres=' + x + '&yres=' + y;

        $.getJSON(JSONurl, JSONdata,
            (function(ad) {
                    function(serverResponse) {
                        $('head').prepend(serverResponse.cssReset);
                    $(serverResponse.adContent).insertAfter(ad);
                    ad.remove();
                }
            })(ad) 
        );
    });
});