将 js Array() 转换为 JSon 对象以与 JQuery .ajax 一起使用

IT技术 javascript jquery arrays json
2021-03-09 16:57:16

在我的应用程序中,我需要通过 ajax post 将 javascript Array 对象发送到 php 脚本。像这样的东西:

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

数组的索引是字符串而不是整数,因此像 saveData.join('&') 这样的东西不起作用。

想法?

提前致谢

5个回答

如果它不是一个数组,不要让它成为一个数组,让它成为一个对象:

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;

使用数组的方式来做这件事只是利用了 Javascript 对数组的处理方式,而不是真正正确的做法。

如果已经定义了数组,则可以通过循环遍历数组的元素来创建一个 json 对象,然后您可以将其发布到服务器,但是如果您按照上述情况创建数组,则只需创建一个 json 对象即可由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>

希望这可以帮助

您可以迭代 saveData 对象的键/值对以构建一对数组,然后在结果数组上使用 join("&") :

var a = [];
for (key in saveData) {
    a.push(key+"="+saveData[key]);
}
var serialized = a.join("&") // a=2&c=1
$.ajax() 默认会字符串化一个 js 对象(地图)。查看 processData 选项!
2021-04-18 16:57:16

数组对象和 JSON 对象之间实际上是有区别的。您可以执行以下操作,而不是创建数组对象并将其转换为 json 对象(使用 JSON.stringify(arr)):

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

无需将其转换为 JSON,因为它已经是一个 json 对象。查看相同的使用json.toSource();

使用服务器上的数据时,你的字符可以通过添加斜杠到达例如如果string = {“hello”}来作为string = {\“hello”}来解决以下函数可以稍后使用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);
?>