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

Nav*_*avy -1 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>
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

Bla*_*ise 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);
    }
})();                  
Run Code Online (Sandbox Code Playgroud)