Итерация по циклу JSON в операторах JQuery и Ternary - PullRequest
1 голос
/ 18 февраля 2012

Эй, ребята, я боролся с этим в течение последнего часа и поливал весь старый поток при разборе JSON, но я сталкиваюсь с двумя проблемами. во-первых, это возможность перебирать два моих объекта, используя этот код.

 <script>
     $.each(data, function(index, obj) { 
        $.each(obj, function(key, val) { 
          items.push((key == "key") 
          ? '<input type="checkbox" name="' + val + ' /> ' 
          : '<div id="' + key + '">' + key + ': ' + val + '</div>'
        }); 
    });
 </script>

Использование $.each(data[0 or 1], function(key, val) позволит мне разобрать один или другой раздел хотя.

Выход php на данный момент составляет

[
    {
        "key":"4",
        "role":null,
        "region":"",
        "inspection_type":"melons",
        "inspection_number":"123",
        "customer_number":"",
        "report_date":"0000-00-00",
        "status":"0",
        "order_date":"2012-02-17 13:59:18",
        "customer":"",
        "customer_division":"",
        "location":"",
        "memo":null,
        "billing_key":null,
        "shipper":"",
        "po":"",
        "commodity":"",
        "label":""
    },

    {
        "key":"2",
        "role":null,
        "region":"Seattle",
        "inspection_type":"berries",
        "inspection_number":"1023",
        "customer_number":"206-420-9564",
        "report_date":"2012-10-21",
        "status":"1",
        "order_date":"2012-02-17 12:24:11",
        "customer":"Jd Daniel",
        "customer_division":"The Moon",
        "location":"West Seattle, WA",
        "memo":null,
        "billing_key":null,
        "shipper":"Shipper1",
        "po":"PO1",
        "commodity":"Commodity1",
        "label":"Label1"
    }
]

И всегда будет хорошо сформирован.

Второй вопрос - мое троичное утверждение. Повторное использование $.each(data[0 or 1], function(key, val), по крайней мере, передаст мне значение ИСТИНА, когда оно нажмет key =='key', но не выдаст ожидаемый блок <input>, но даст значение True / False? Я, очевидно, делаю МНОГИЕ вещи неправильно, кто-то может указать на мою наивность для меня?

Отредактировано

Код переработан, троичное утверждение решено

1 Ответ

0 голосов
/ 18 февраля 2012

.push() добавляет все в скобках к новому индексу в массиве:

items.push(key == "key") ? '<input type="checkbox" name="' + val + ' /> ' : '';

должно быть:

items.push((key == "key") ? '<input type="checkbox" name="' + val + ' /> ' : '');

Обратите внимание, что возвращение из оператора if не заключено в круглые скобки. Поскольку в скобках было указано key == "key", в массив можно было бы добавить либо true, либо false.

Ваш код $.each() перебирает массив объектов, возвращаемых вашим PHP, но key равен индексу массива для текущей итерации, а val - фактический объект в индексе массива. Чтобы получить доступ к свойствам объекта в переменной val, вы можете сделать это:

  $.each(data, function(index, obj) {
      items.push('<input type="checkbox" name="' + obj.key + ' />');
  });

Всякий раз, когда я устанавливаю код для получения данных от веб-службы; Я делаю console.log(data) в первой строке обратного вызова, чтобы точно узнать, как получить доступ к каждому желаемому свойству.

...