【问题标题】:Convert js Array() to JSon object for use with JQuery .ajax将 js Array() 转换为 JSON 对象以用于 JQuery .ajax
【发布时间】:2010-10-17 08:46:56
【问题描述】:

在我的应用程序中,我需要通过 ajax 帖子将一个 javascript 数组对象发送到 php 脚本。像这样的:

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

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

想法?

提前致谢

【问题讨论】:

    标签: javascript jquery arrays json


    【解决方案1】:

    如果不是数组就不要把它变成一个数组,把它变成一个对象:

    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 对数组的处理方式,而不是真正的正确方式。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • $.ajax() 默认会字符串化一个 js 对象(map)。查看 processData 选项!
      【解决方案3】:

      如果数组已经定义,你可以通过循环数组的元素来创建一个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>
      

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        使用服务器上的数据时,您的字符可以通过添加斜线来达到,例如 如果字符串 = {“你好”} 字符串 = {\ "hello \"} 解决下面的函数,后面可以使用json decode。

        <?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);
        ?>
        

        【讨论】:

          【解决方案5】:

          数组对象和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();

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-25
            • 2022-01-12
            • 2011-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多