2009-04-03 63 views
27

trong ứng dụng của tôi, tôi cần gửi đối tượng Array javascript tới tập lệnh php qua bài đăng ajax. Một cái gì đó như thế này: chỉ sốChuyển đổi js Array() thành đối tượng JSon để sử dụng với JQuery .ajax

var saveData = Array(); 
saveData["a"] = 2; 
saveData["c"] = 1; 
alert(saveData); 
$.ajax({ 
    type: "POST", 
    url: "salvaPreventivo.php", 
    data:saveData, 
    async:true 
    }); 

Array Avatar của là chuỗi và không int, vì vậy vì lý do này một cái gì đó giống như saveData.join ('&') không hoạt động.

Ý tưởng?

Cảm ơn trước

Trả lời

61

Đừng làm cho nó trở thành một mảng nếu nó không phải là một mảng, làm cho nó một đối tượng:

var saveData = {}; 
saveData.a = 2; 
saveData.c = 1; 

// equivalent to... 
var saveData = {a: 2, c: 1} 

// equivalent to.... 
var saveData = {}; 
saveData['a'] = 2; 
saveData['c'] = 1; 

Làm nó theo cách bạn đang làm nó với Mảng chỉ đang tiến hành lợi dụng điều trị Mảng của Javascript và không thực sự đúng cách để thực hiện nó.

+1

Cảm ơn, nó hoạt động theo cách này;) – Alekc

4

Bạn có thể lặp lại các cặp khóa/giá trị của đối tượng SAVEDATA để xây dựng một mảng của các cặp, sau đó sử dụng tham gia ("&") trên mảng kết quả:

var a = []; 
for (key in saveData) { 
    a.push(key+"="+saveData[key]); 
} 
var serialized = a.join("&") // a=2&c=1 
+0

$ .ajax() sẽ xâu chuỗi đối tượng js (bản đồ) theo mặc định. hãy kiểm tra tùy chọn processData! – zack

7

Nếu mảng đã được xác định , bạn có thể tạo đối tượng json bằng cách lặp qua các phần tử của mảng mà sau đó bạn có thể đăng lên máy chủ, nhưng nếu bạn tạo mảng như trường hợp trên, chỉ cần tạo đối tượng json thay vì sugested Paolo Bergantino

var saveData = Array(); 
    saveData["a"] = 2; 
    saveData["c"] = 1; 

    //creating a json object 
    var jObject={}; 
    for(i in saveData) 
    { 
     jObject[i] = saveData[i]; 
    } 

    //Stringify this object and send it to the server 

    jObject= YAHOO.lang.JSON.stringify(jObject); 
    $.ajax({ 
      type:'post', 
      cache:false, 
      url:"salvaPreventivo.php", 
      data:{jObject: jObject} 
    }); 

    // reading the data at the server 
    <?php 
    $data = json_decode($_POST['jObject'], true); 
    print_r($data); 
    ?> 

    //for jObject= YAHOO.lang.JSON.stringify(jObject); to work, 
    //include the follwing files 

    //<!-- Dependencies --> 
    //<script src="http://yui.yahooapis.com/2.9.0/build/yahoo/yahoo-min.js"></script> 

    //<!-- Source file --> 
    //<script src="http://yui.yahooapis.com/2.9.0/build/json/json-min.js"></script> 

Hy vọng t giúp mình

0

Khi sử dụng các dữ liệu trên máy chủ, nhân vật của bạn có thể tiếp cận với việc bổ sung các dấu gạch chéo ví dụ nếu chuỗi = { "hello"} đến như là chuỗi = {\ "hello \"} để giải quyết sau chức năng có thể được sử dụng sau này để sử dụng giải mã json.

<?php 
function stripslashes_deep($value) 
{ 
    $value = is_array($value) ? 
       array_map('stripslashes_deep', $value) : 
       stripslashes($value); 

    return $value; 
} 

$array = $_POST['jObject']; 
$array = stripslashes_deep($array); 

$data = json_decode($array, true); 
print_r($data); 
?> 
1

Có sự khác biệt thực sự giữa đối tượng mảng và đối tượng JSON. Thay vì tạo đối tượng mảng và chuyển đổi nó thành một đối tượng JSON (với JSON.stringify (arr)) bạn có thể làm điều này:

var sels = //Here is your array of SELECTs 
var json = { }; 

for(var i = 0, l = sels.length; i < l; i++) { 
    json[sels[i].id] = sels[i].value; 
} 

Không cần phải chuyển đổi nó thành JSON vì nó đã là một đối tượng JSON. Để xem cùng một cách sử dụng json.toSource();

Các vấn đề liên quan