【问题标题】:Am I building the JavaScript objects correctly for a JSON string array?我是否为 JSON 字符串数组正确构建了 JavaScript 对象?
【发布时间】:2018-05-27 09:37:54
【问题描述】:

在 JavaScript 中,我有以下代码:

 for (i = 1; i<3; i++) 

{

// above I collect check_a and check_b through radio button responses.

var connectJSON = ",";
var passObj = {id:i, ask:check_a, description:check_b};

// adding object string together in tempObj
var tempObj = tempObj + connectJSON + passObj;
}

// get ready for transport to server and display result of string
 var data = JSON.stringify(tempObj);
 console.info("info: " + data);


 // post string to server

  $.ajax
  ({
  type: 'POST',
  url: 'out.php',
  data: {data: data},

  success: function(msg)
  {
  alert(msg);
   }

});

在 out.php 中,我尝试确定从服务器返回的结果。代码如下:

<?php

if (ISSET($_POST['data']))

    {
    echo "TRUE";
    }
    ELSE
    {
    echo "False";
    }

var_dump($_POST['data']);

?>

我收到这条消息,AJAX 警报 (msg):

**True** string(42) ""question, [object Object], [object Object]""

显然这条消息描述了正在传递的字符串数组。

如果格式正确,我现在需要做的是能够访问字符串数组 - 可能使用 JSON_decode 并识别数组的属性,以便我可以插入 MySQL 数据库。

感谢您的所有帮助...

【问题讨论】:

  • connectJSON + passObj; 这将强制转换 passObj 的字符串,这将返回 [Object object]。而是做...+ JSON.stringify(passObj)

标签: javascript ajax post isset stringify


【解决方案1】:

我试图了解这种减速是如何发生的: var tempObj = tempObj + etc...; 可能的 ? 你不能设置你刚刚声明的东西的价值, 和你刚刚声明的一样。

【讨论】:

    【解决方案2】:
    var connectJSON = ",";
    var passObj = {id:i, ask:check_a, description:check_b};
    
    // adding object string together in tempObj
    var tempObj = tempObj + connectJSON + passObj;
    

    首先。如果你只是在控制台中测试这部分,你会看到如果你连接 JS 对象和字符串'',你会得到字符串“[object Object],[object Object]”。您需要先对 JS 对象进行字符串化,然后再将其与字符串连接。

    其次,我似乎真的能理解您的代码,但循环该代码只会覆盖这些变量,因为它们是在循环中声明的,所以这似乎不正确。可能您希望将声明排除在循环之外。

    否则它有点像这样 - 你将 Js 对象字符串化并将其作为数据传递给 ajax。

    【讨论】:

      【解决方案3】:

      问题在这里var tempObj = tempObj + connectJSON + passObj;。您正在连接 objectsstrings。在这种情况下,JavaScript 将首先使用Object.prototype.toString(),然后进行连接。和Object.prototype.toString() 在对象的情况下将产生[object Object]。要解决此问题,您必须创建一个如下所示的数组。

      var tempObj = [];
      for (i = 1; i < 3; i++) {
        // above I collect check_a and check_b through radio button responses.
        var connectJSON = ",";
        var passObj = {
          id: i,
          ask: check_a,
          description: check_b
        };
        tempObj.push(passObj);
      }
      

      也可以跳过JSON.stringify()直接提交JS对象。

      【讨论】:

        【解决方案4】:

        没有。要构建 JSON,首先构建一个有效的结构,然后在结果上使用JSON.stringify;在构建结构时不要转换为字符串。 connectJSON + passObj 将强制 passObj 字符串化,导致 "[object Object]"

        改为:

        var array = []; // <== An empty array
        for (i = 1; i<3; i++) 
        {
            // Push entries into the array
            array.push({id:i, ask:check_a, description:check_b});
        }
        
        // Convert to JSON
        var data = JSON.stringify(array);
        

        旁注:您问题中的代码没有在任何地方声明i。如果您的真实代码没有,它就会成为The Horror of Implicit Globals 的牺牲品。* 请务必声明您的变量。 :-)


        * (这是我贫血的小博客上的帖子)

        【讨论】:

        • 到目前为止,非常感谢您的帮助!我已经设法从列出数组的 php 页面中获得正确的响应。我相信我在 AJAX 中传递了一个可以使用 $_POST 打印的数组字符串。我现在遇到的问题是当我尝试遍历数组以识别其内容时,因为我需要插入数据库。
        • 注意:未定义的变量数据。
        • @Tunji:那将是一个新问题(如果你不能先弄清楚的话)。
        • 感谢您的帮助
        猜你喜欢
        • 2016-03-14
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        • 2011-05-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        相关资源
        最近更新 更多