JSON, как найти другое значение по тому же индексу из значения в Javascript Object - PullRequest
0 голосов
/ 01 июня 2011

Простой вопрос, я уверен, но я не могу понять его.

У меня есть несколько JSON, возвращенных с сервера

    while ($Row = mysql_fetch_array($params))
    {
        $jsondata[]= array('adc'=>$Row["adc"], 
                           'adSNU'=>$Row["adSNU"],
                           'adname'=>$Row["adname"],
                           'adcl'=>$Row["adcl"],
                           'adt'=>$Row["adt"]);
    };

echo json_encode(array("Ships" => $jsondata));

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

if (ajaxRequest.readyState==4 && ajaxRequest.status==200 || ajaxRequest.status==0)
        {
            WShipsObject = JSON.parse(ajaxRequest.responseText);

            var eeWShips = document.getElementById("eeWShipsContainer");

                for (i=0;i<WShipsObject.Ships.length;i++)
                {
                    newElement = WShipsObject.Ships;
                    newWShip = document.createElement("div");

                    newWShip.id = newElement[i].adSNU;
                    newWShip.class = newElement[i].adc;

                    eeWShips.appendChild(newWShip);


                } // end for

        }// If

Вы можете увидеть, например, здесь, что я создал элементы HTML DIV внутри родительского div, где каждый новый div имеет id и класс. Вы также заметите, что я не использовал все данные, возвращенные в объекте ...

Я использую JQuery для обработки щелчка по объекту, и вот моя проблема: я хочу использовать идентификатор элемента для возврата другого значения, например, adt значение из JSON с тем же индексом , Беда в том, что при событии click я больше не знаю индекс, потому что это путь после создания элемента. т.е. я больше не в цикле for.

Так как мне это сделать?

Вот то, что я пытался, но я думаю, что я ошибся деревом ... .inArray() возвращает минус 1 в обоих тестовых случаях. Помните, что объект доступен во всем мире ...

$(".wShip").click(function(){

    var test1 = $.inArray(this.id, newElement.test);
    var test2 = $.inArray(this.id, WShipsObject);

    //alert(test1+"\n"+test2+"\n"+this.id);

});

Ответы [ 3 ]

0 голосов
/ 01 июня 2011
$(".wShip").click(function(){
  var id = $(this).id;
  var result;

  WShipsObject.Ships.each(function(data) {
    if(data.adSNU == id) {
      result = data;
    }  
  });

  console.log(result);
}
0 голосов
/ 02 июня 2011

Я не смог найти способ найти указатель в соответствии с запросом, но я создал вариант ответа Девраджа.

В решении я создал пользовательский атрибут с именем key, в который я сохранил индекс.

newWShip.key = i;

Позже, когда мне снова понадобится индекс, я могу использовать this.key внутри метода JQuery .click():

var key = this.key;
var adt = WShipsObject.Ships[key].adt;

Можно утверждать, что на самом деле я мог бы хранить все данные в пользовательских атрибутах, но я бы сказал, что это было бы ненужным дублированием памяти.

0 голосов
/ 01 июня 2011

Например, вы можете просто использовать атрибут ID DIV для хранения уникальной строки, в вашем случае это может быть индекс.

Мы делаем аналогичные вещи в Google Closure / Javascript, и если вы подключите событие в цикле, в котором вы создаете DIV, вы можете передать ссылку на «текущий» объект.

Чем позже, тем лучше / чище решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...