2012-12-02 72 views
1

我在jQuery中做了一個函數,它將獲得一些數據表單頁面,然後它需要使用ajax發送數據。 我已經測試發送一些字符串作爲數據,所有工作正常,但現在,當我需要發送數組由於某種原因它不起作用。 在控制檯上我有:發送數組時,jquery和ajax

["3"] 
[] 

而我沒有得到警覺。可能是數據類型的一些問題?

$("#save").click(function() { 
    var sendArr= new Array(); 
    var arr = $(".sortable").map(function(){return this.innerHTML}).get();   
    for (var i = 0; i < arr.length; i++) { 

     test =$(arr[i]).map(function() { return $(this).attr("data-ex"); }); 
     console.log(test); 
     sendArr[i]=test; 
    } 


     $.ajax({ 
     type: "POST", 
     url: "http://localhost/someurl/", 
     data: {action: sendArr} 
    }).done(function(msg) { 
      alert("Data Saved: " + msg); 
    }); 

}); 
+0

您是否嘗試添加'.fail'來查看爲什麼'.done'沒有被觸發? – rjz

+0

首先,數據屬性是通過'data()'方法獲得的,其次,如果data屬性是你所追求的,爲什麼不映射它,而不是映射innerHTML,然後用它來獲取數據屬性,你會跳過很多不必要的箍。最後,您的服務器端腳本是否處理數組,並且在發送之前將其包裝在對象中後,它不是真正的數組。 – adeneo

回答

0

gogic - 讓一個簡單的例子來測試,然後從中建立。

$(function() { 

var serialized = JSON.stringify({"msg" : "Hello!"}); 
$.ajax({ 
    url: myURL, 
    type: 'POST', 
    data: serialized, 
    contentType: 'json', 
    dataType: 'html' 
}).done(function(obj) { 
    $('div').html(obj.msg); 
}).fail(function() { 
    alert('Failed!'); 
}); 

}); 

dataType是你期望得到的; contentType是你發送的內容。您的JSON必須使用JSON.stringify(obj)進行序列化。

此外,當你發送一個數組作爲JSON,它應該看起來像:

var array_json = {"myArray" : [1, "example", 2, "array"]} 
var serialized = JSON.stringify(array_json) 

使用的console.log以確保您所創建的JSON是有效的。

+0

你的例子工作,但不與sendArr變量,如果我把類似 'var jString = JSON.stringify({action:'test'});' 它工作 當我做console.log(sendArr); 我得到這樣的'[[「3」],[]]' mb是一個數組中的數組的問題cos? – gogic1

+0

您的sendArr變量不是有效的JSON。參考我的array_json示例:{「myArray」:[1,「example,2,」array]}。它有一個key:value對,而你的數組[[「3]]」實際上是一個數組的數組的單個字符串「3」,你的數組沒有任何意義,在用AJAX調用發送它之前,請使用http://jsonlint.com/來驗證你的JSON。 – ktm5124