从ajax响应创建Jquery数组

时间:2014-12-06 01:51:34

标签: jquery arrays

我正在尝试向某些div添加或删除类。 应根据html的值为这些div分配不同的类。 我不确定我做错了什么,但我的代码无效。

这是我的代码:

$.ajax({
    type: 'POST',
    url: 'loc/bcheck.php',
    success: function(data){
        tArrx = new Array(data);
    },
    complete: function(){
        $('.bHr').each(function(){
            curElm = $(this);
            var bTm = curElm.html();
            if ($.inArray(bTm, tArrx) !== -1){
                curElm.addClass('disabled');
                curElm.removeClass('available');
            }
            else{
                curElm.addClass('available');
                curElm.removeClass('disabled');
            }
        });
    }
});

<div class="bHr">1</div>
<div class="bHr">5</div>

正确捕获div的'html的所有值。 并且该函数运行没有错误。 但是我总是得到相同的结果,数组中没有值。

'data'是 1“,”2“,”3“,”4 并使用console.log返回 [“1”,“2”,“3”, “4”]

5 个答案:

答案 0 :(得分:1)

我认为问题是new Array(data),如果数据是字符串类型,那么它创建一个数组,其中一个元素是字符串,否则如果数据是数组,那么tArrx将是一个数组使用1个元素作为数组,以便$.inArray()始终返回-1

$.ajax({
    type: 'POST',
    url: 'loc/bcheck.php',
    //set datatype as json
    dataType: 'json',
    success: function (data) {
        var tArrx = data;
        $('.bHr').each(function () {
            var curElm = $(this);
            //wrong variable name& you might have to trim the html contents
            var bTm = curElm.html().trim();
            if ($.inArray(bTm, tArrx) !== -1) {
                curElm.addClass('disabled');
                curElm.removeClass('available');
            } else {
                curElm.addClass('available');
                curElm.removeClass('disabled');
            }
        });
    }
});

答案 1 :(得分:1)

您实际上已经创建了一个多维数组

tArrx = new Array(data);

这就是你匹配数组的方式

var data = ["1","2","3","4"];
var tArrx = new Array(data);
confirm(tArrx[0]);
confirm(data);
confirm($.inArray('1', tArrx[0]) !== -1);

最好还是不要将数据转换为数组

var data = ["1","2","3","4"];
confirm(data);
confirm($.inArray('1', data) !== -1);

Working example HERE

我修改了示例以尽可能地复制您的条件。

var data = '1","2","3","4';
var tArrx = new Array(data);
console.log('data '+data);
console.log('data.length '+data.length);
console.log('data[0] '+data[0]);
console.log('data[1] '+data[1]);
console.log('data[2] '+data[2]);
console.log('data[3] '+data[3]);
console.log(tArrx.length);
console.log(tArrx[0].length);
console.log(tArrx);
console.log(tArrx[0]);
$('.bHr').each(function(){
     curElm = $(this);
     var bTm = curElm.html();
     console.log(typeof bTm);
     console.log($.inArray(bTm, tArrx) !== -1);
     console.log($.inArray(bTm, tArrx[0]) !== -1);
     console.log($.inArray(bTm, data) !== -1);
});

没有从PHP请求返回的开头和结尾引号导致数组赋值返回长度为1的数组,该数组填充了长度为13的字符串。这将导致jQuery.inArray()方法找不到匹配1和13字符串。如果传递字符串,它可以找到1。修复丢失的开始和结束qoutes将是您最好的解决方案。从更新的工作示例中查看控制台日志。

 data 1","2","3","4
 data.length 13
 data[0] 1
 data[1] "
 data[2] ,
 data[3] "
 1
 13
 ["1","2","3","4"]
 1","2","3","4
 string
 false
 true
 true
 string
 false
 false
 false

答案 2 :(得分:0)

在我看来,你必须施展变量:

if ($.inArray(bTm.toString(), tArrx) !== -1)

答案 3 :(得分:0)

你在这一行有拼写错误:

    if ($.inArray(bTm, tArrx) !== -1){

不应该是:

    if ($.inArray(Tbm, tArrx) !== -1){

答案 4 :(得分:0)

所以,我明白了。问题是PHP响应不是PHP数组。为了解决这个问题,我将我的响应作为一个数组并将其添加到我的PHP文件中:

json_encode($tArrx);

并按如下方式更改了我的jQuery:

$.ajax({
    type: 'POST',
    url: 'loc/bcheck.php',
    dataType: 'json',
    success: function (data) {
        tArrx = data;
    },
    complete: function(){
        $('.bHr').each(function(){
            curElm = $(this);
            var bTm = curElm.html();
            if ($.inArray(bTm, tArrx) !== -1){
                curElm.addClass('disabled');
                curElm.removeClass('available');
            }
            else{
                curElm.addClass('available');
                curElm.removeClass('disabled');
            }
        });
    }
});

我用你们所有人的例子来实现这一点,我感谢你们。没有你的帮助就不可能做到!