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)
);
});
});