并非所有来自循环的HTTPS请求都到达服务器

时间:2015-04-30 10:00:40

标签: javascript

这是我的JavaScript:

<script type="text/javascript">
    (function () {
        var lidd = 1;
        var ga1 = document.createElement('script'); ga1.type = 'text/javascript';
        ga1.async = true;           
        var res = ["A1LpRTPOUKU%3d", "a8g%2bUPW0%2bck%3d", "ptb0PT3OMIc%3d", "8NzewxsG6Zc%3d"];
        for (var i = 0; i < res.length; i++) {
            alert('mid=' + res[i]);
            ga1.src = ('https:' == document.location.protocol ? 'https://ssl' :
            'http://') + 'localhost:59115/ui/trackconversion.aspx?cid=CAR9nmKJG1A%3d&mid=' + res[i] + '&lid=' + lidd;
            var s1 = document.getElementsByTagName('script')[0];
            s1.parentNode.insertBefore(ga1, s1);
        }
    })();                  
</script>

我的问题是for循环在此代码中无法正常工作。这里res的长度为4,因此循环应执行4次,但在我的代码中,它只是部分执行。这意味着,当我执行代码时,我会alert('mid=' + res[i]); 4次显示所有四个值,即"A1LpRTPOUKU%3d""a8g%2bUPW0%2bck%3d""ptb0PT3OMIc%3d""8NzewxsG6Zc%3d" 。但在那之后,我的trackconversion.aspx只被击中一次,而不是被击中4次。

我做错了什么?

1 个答案:

答案 0 :(得分:6)

您需要将document.createElement部分放在for循环中。你现在正在做的是创建一次脚本标记,将其添加到文档,然后多次更改src。

这不能按预期工作,您必须为每个src创建一个新的脚本元素。例如:

(function () {
    var lidd = 1;        
    var res = ["A1LpRTPOUKU%3d", "a8g%2bUPW0%2bck%3d", "ptb0PT3OMIc%3d", "8NzewxsG6Zc%3d"];
    for (var i = 0; i < res.length; i++) {
        var ga1 = document.createElement('script'); ga1.type = 'text/javascript';
        ga1.async = true;   
        alert('mid=' + res[i]);
        ga1.src = ('https:' == document.location.protocol ? 'https://ssl' :
        'http://') + 'localhost:59115/ui/trackconversion.aspx?cid=CAR9nmKJG1A%3d&mid=' + res[i] + '&lid=' + lidd;
        var s1 = document.getElementsByTagName('script')[0];
        s1.parentNode.insertBefore(ga1, s1);
    }
})();