【问题标题】:Variables in errors ajax+jquery错误中的变量 ajax+jquery
【发布时间】:2014-06-05 10:18:03
【问题描述】:
<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];也未定义。为什么?这个问题我该怎么办?

【问题讨论】:

  • 在第一个 for 循环后检查 ids 值。它可能是空的
  • 循环的所有迭代都是空的
  • 你正在尝试获取空数组的第 i 个索引,所以我问你:未定义是否正常?

标签: php jquery ajax error-handling


【解决方案1】:

这是一种非常糟糕的 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 服务器的次数过多。

【讨论】:

  • data:{data_arr:myArr} 会起作用吗?请改用data:JSON.stringify(myArr)
【解决方案2】:

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

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(ids);在最后一个“for”之前。

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多