ajax+jquery错误中的变量


Variables in errors ajax+jquery

<script>
    $(document).ready(function () {
        var chanels_elems = document.getElementsByClassName('chanels');
        var ids = [];
        var urls = [];
        var i = 0;
        for (i = 0; i < chanels_elems.length; i++) {
            ids[i] = chanels_elems[i].id;
            urls[i] = $('#' + ids[i]).attr('url');
        }
        for (i = 0; i < chanels_elems.length; i++) {
            var id = ids[i];
            $.ajax({
                url: '{{ Url.media('ajax/testajax') }}',
                dataType: 'json',
                data: {id: ids[i], url: urls[i]},
                type: 'POST',
                success: function (result) {
                    if (result.status == '1') {
                        $('#span_' + result.id).attr('class', 'label label-success').empty().append('true');
                    }
                    if (result.status == '2') {
                        $('#span_' + result.id).attr('class', 'label label-danger').empty().append('false');
                    }
                },
                error: function (xhr) {
                    $('#span_' + ids[i]).attr('class', 'label label-info').empty().append('error');
                }
            });
        }
    });
</script>

错误处理程序中的ids[i]未定义,var id=ids[i];也未定义。为什么?我该怎么处理这个问题?错误处理程序中的ids[i]未定义,var id=ids[i];也未定义。为什么?我该怎么处理这个问题?

这是一种非常糟糕的ajax调用方式。只对所有id和url进行一次ajax调用。发回一个包含id和状态的数组。把这个用于你的JS。如果你能展示你的php页面,我也可以帮你。试试这个

var myArr={};
$('.chanels').each(function(){
    myArr[$(this).attr('id')]=$(this).attr('href');//Use whatever you need about the url.
});
$.ajax({
    type:'POST',
    url:'your url',
    data:myArr,
    dataType:'JSON',
    success:function(result)
    {
    }
});

你ping服务器的次数太多了。

注意,当调用回调时,var i在数组的最后一个值中。你应该使用传递变量的副本。类似的东西。

for (i = 0; i < chanels_elems.length; i++) {
(function(i) {
    var id = ids[i];
    $.ajax({
        url: '{{ Url.media('ajax/testajax') }}',
        dataType: 'json',
        data: {id: ids[i], url: urls[i]},
        type: 'POST',
        success: function (result) {
            if (result.status == '1') {
                $('#span_' + result.id).attr('class', 'label label-success').empty().append('true');
            }
            if (result.status == '2') {
                $('#span_' + result.id).attr('class', 'label label-danger').empty().append('false');
            }
        },
        error: function (xhr) {
            $('#span_' + ids[i]).attr('class', 'label label-info').empty().append('error');
        }
    });
})(i);
}

并尝试查看console.log(id(;在最后一个"for"之前。