JSON如何从Javascript对象中的值中找到同一索引处的另一个值

时间:2011-05-31 22:11:47

标签: javascript jquery json object

一个简单的问题,我确定,但我无法理解。

我从服务器返回了一些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

你可以在这里看到我在父div中创建了HTML DIV元素,每个新div都有一个id和一个类。您还会注意到我没有使用对象中返回的所有数据...

我使用JQuery来处理对象的点击,这是我的问题,我想要使用的是来自元素的id以返回另一个值,例如来自JSON的adt值相同的指数。问题是在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 :(得分:0)

对于其中一个,您可以简单地使用DIV的ID属性来存储唯一的字符串,在您的情况下,它可以是索引。

我们在Google Closure / Javascript中执行类似的操作,如果您在循环中连接正在创建DIV的事件,则可以传入对“当前”对象的引用。

后者是更好/更清洁的解决方案。

答案 1 :(得分:0)

$(".wShip").click(function(){
  var id = $(this).id;
  var result;

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

  console.log(result);
}

答案 2 :(得分:0)

我无法找到找到索引的方法,但我在Devraj的答案中创建了一个变体。

在解决方案中,我创建了一个名为key的自定义属性,我在其中存储了索引。

newWShip.key = i;

稍后当我再次需要索引时,我可以在JQuery this.key方法中使用.click()

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

你可能会说,实际上我可以将所有数据存储到自定义属性中,但我认为这将是不必要的重复内存。