在for循环中调用一个xhr内的ajax

我正在尝试在循环xhr请求中调用ajax,但ajax结果只能让我成为最后一个..或者只是一次..

$("#txtArea").contents().find('img').each(function () {
            ctr++;
            xhr= new XMLHttpRequest();
            xhr.open('GET', $(this).attr("src"), true);

            xhr.responseType = 'blob';

            xhr.onload = function (e) {
                if (this.status == 200) {
                    var blob = this.response;
                    var reader = new window.FileReader();
                    reader.readAsDataURL(blob); 
                    reader.onloadend = function() {
                        base64data = reader.result;


                        console.log("cheweee");

                    base64ToImage(base64data, ctr);  <<--this is the ajax call

                    }


                }

            };

这里是阿贾克斯

function base64ToImage(base64data,ctr) {

    $.ajax({
        method: "POST",
        url: "ConvertB64",
        async: false,
        data: {
            base64datastring: base64data, imgctr: ctr
        },
        success: function (data) {
            console.log(data);
        }
    })

        .done(function (msg) {
            console.log(msg);
        });
}

所以我想要做的是..我将一个对象url转换为blob,然后通过该blob转换成图像,然后我返回图像位置为我的img标记。

在xhr方面我能够获得blob数据,但转换为图像只发生一次。 和它的最后一滴。

即时通讯使用MVC。 我尝试创建一个像这个xhr [ctr]的阵列xhr,并且我还添加了asynch:false。

谢谢


我认为问题在于你的ctr变量被循环的所有呈现共享,并且总是等于该循环中的最终值。 尝试使用传递给.each()函数的索引:

$("#txtArea").contents().find('img').each(function (i) {
    ...
    ...
    base64ToImage(base64data, i+1); //index starts with 0 so adding 1
});

尝试使第一个Ajax请求同步,并检查.....因为你同时发送多个Ajax请求,响应没有排序,这可能是问题

链接地址: http://www.djcxy.com/p/51963.html

上一篇: call a ajax inside an xhr inside a for loop

下一篇: Return value from last AJAX request in AJAX chain that is inside a for loop