javascript - 连接对象不起作用或者我需要将值转换为正确的格式?

标签 javascript jquery json object

我需要从第一个 $.postconcat()data.entities 获取 data.entities.paises 来自第二个 $.post 这就是我正在做的:

  var paisesFromEntity;

  $.post(Routing.generate('productoGuardarPasoCinco'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
    if (data.entities !== "undefined" || data.entities != "") {
      paisesFromEntity = data.entities.paises;
    }
  }).fail(function () {
      return false;
  });

  var returnList = function (entities) {
      if (entities.length > 0) {
          var items = [];
          entities.forEach(function (value, index, array) {
              items.push(value.pais);
          });

          return items.join(', ');
      }
  };

  var fullList = [];

  $.post(Routing.generate('agregarPaisesDistribuidor'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
      fullList = fullList.concat(data.entities, JSON.stringify(paisesFromEntity));
      var displayText = returnList(fullList);
      $('#td-' + data.idToUpdate).html(displayText);
  }).fail(function () {
      return false;
  });

第一个 $.post() 获取此输出:

{
   "success":true,
   "entities":{
      "id":13,
      "nombre":"dsdsfsdfsd",
      "direccion":"fsdfsdfsdf",
      "telefono":"4234234",
      "paises":[
         "Bolivia",
         "Costa Rica",
         "Ecuador"
      ]
   }
}

第二个 $.post() 的这个:

{
   "success":true,
   "entities":[
      {
         "pais":"Colombia"
      },
      {
         "pais":"Panam\u00e1"
      },
      {
         "pais":"Ciudad del Vaticano"
      }
   ],
   "idToUpdate":"14"
}

displayText 中的预期输出应该类似于:Bolivia, Costa Rica, Ecuador, Columbia, Panam\u00e1, Ciudad del Vaticano 但我得到的是这个输出哥伦比亚、巴拿马、梵蒂冈城,并且某些值缺少 data.entities.paises 中的值。我怀疑错误是 data.entities.paisesdata.entities 的格式不同,因此 returnList 上的函数没有上帝不做这个工作,那么 concat() 函数或 data.entities.paises 格式的错误在哪里?如果是第二个,在连接两者之前如何转换为与 data.entities 相同的格式?

最佳答案

您这里有 3 个问题。

首先,您可能会遇到时间问题,因为无法保证第一个 $.post 会在第二个之前完成。您需要确保在入住之前两者都已完成。您有几种方法可以做到这一点 - 链接、caolan 的异步库 https://github.com/caolan/async 、检查回调等 - 但这不是您在这里询问的内容。

第二个问题是第一个响应是一个字符串数组;第二个是您想要其值的对象数组,您需要将它们组合起来。

第三个问题是您将字符串数组转换为 JSON 字符串,这也不起作用。

试试这个。

// assuming data.entities is an array of objects, and paisesFromEntity is an array of strings
fullList = fullList.concat(paisesFromEntity, getValues(data.entities));

getValues() 函数

getValues = function(arr){
  var ret = [], i;
  for (i=0; i<arr.length; i++) {
     ret.push(arr[i].pais);
  }
  return(ret);
};

如果您在 jQuery 中执行此操作,则可以使用

getValues = function(arr){
  var ret = [];
  $.each(arr,function(i,entry) {
    ret.push(entry.pais);
  });
  return(ret);
};

如果您可以使用 lodash 或 underscore,则使用 pluck 会更容易。

关于javascript - 连接对象不起作用或者我需要将值转换为正确的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119684/

相关文章:

php - 从 PHP 查询获取特定格式的 JSON

android - java.lang.NullPointerException : Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference 异常

javascript - 如何在具有特定长度限制的所有可能组合中生成字母?

javascript - 如何更改 BingMaps 中群集图钉的颜色?

javascript - D3 - 防止父 <g> 元素触发点击事件

jquery - 如何将 ruby​​ 字符串传递给rails中的application.js文件

javascript - XMLHttpRequest 不执行任何操作....?

javascript - 使用 Opera mini 和 UC 浏览器时 MySQL 值未更新?

jquery - 获取输入类型 file 的值,如果为空则发出警报

java - 如何使用 Gson 解析 JSON 数组