2012-12-02 28 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