2014-12-06 135 views
0

我試圖添加或刪除某些div的類。 根據html的值,這些div應該被分配不同的類。 我不知道我在做什麼錯,但我的代碼無法正常工作。從ajax響應創建jquery數組

這是我的代碼:

$.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的所有值都被正確地捕獲。 該函數運行時沒有錯誤。 但我總是得到相同的結果,值不存在於數組中。

'數據' 是1" , 「2」, 「3」, 「4並使用CONSOLE.LOG它返回[」 1" , 「2」, 「3」, 「4」]

+0

你在哪裏得到bTm?我認爲它應該是Tbm – 2014-12-06 02:06:03

+0

'var bTm = curElm.html()。trim();' – 2014-12-06 02:07:47

+0

嘗試設置'dataType:'json''爲ajax請求然後'tArrx = data;'... – 2014-12-06 02:13:25

回答

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'); 
      } 
     }); 
    } 
}); 

我使用的例子從所有你們來實現這一我感謝你。如果沒有你的幫助,不可能完成它!

0

在我看來,你必須投中的變量:

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

如果我手動定義tArrx,函數可以正常工作,而不必添加'.toString()'。當我使用'data'創建數組時,問題就出現了。 – user1885099 2014-12-06 02:07:54

+0

好吧,我假設'toString'函數沒有解決問題。我會考慮別的。 – Verhaeren 2014-12-06 02:44:14

0

你有沒有在這一行一個錯字:

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

它不應該是:

if ($.inArray(Tbm, tArrx) !== -1){ 
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'); 
      } 
     }); 
    } 
}); 
+0

我現在只是'tArrx未定義'。 – user1885099 2014-12-06 02:24:45

+0

@ user1885099刪除'var tArrx = data;'的'var' infront,我想你在別的地方也用到了 – 2014-12-06 02:25:44

+0

好吧,如果我在'success'裏面使用.each函數,那麼它就不會做任何事情值在數組中(沒有錯誤,只是沒有)。如果我在'complete'中使用.each函數,即使我試圖從'tArrx'中刪除'var',我也會得到'tArrx未定義'的錯誤。 – user1885099 2014-12-06 02:39:14

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請求返回的報價是導致數組賦值返回填充長度13的字符串長度1的陣列這將導致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 
+0

'data'是PHP文件的響應 – user1885099 2014-12-06 02:36:56

+0

@ user1885099我有與EGP相同的問題:您能否顯示tArrx的控制檯日誌? 控制檯日誌tArrx從我的例子如下所示: [數組[4]] 0:數組[4] 0: 「1」 1: 「2」 2: 「3」 3:「4 「 長度:4 __proto__:Array [0] 長度:1 – Threadid 2014-12-06 03:18:33

+0

@ user1885099您是否查詢數據的長度?的console.log(data.length); – Threadid 2014-12-06 04:56:31