代码之家  ›  专栏  ›  技术社区  ›  Starx

Jquery-JSON交互

  •  0
  • Starx  · 技术社区  · 14 年前

    我从AJAX请求中获取一个JSON响应,输出如下

    {
    
        "update":
            [{
                "selector":"#selectorname",
                "attribute":"value",
                "value":1
            }],
        "hide":[
            "#tohideselector1",
            "#tohideselector2",
            "#tohideselector3"
            ],
        "show":[
            "#toshowselector1",
            "#toshowselector2",
            "#toshowselector3"        
        ]
    }
    

    现在我需要数组键将它们发送到它们的特定函数,因为每个操作都可能发生多次。我需要一个在PHP中看起来像这样的函数

    foreach($data as $key=>$value) {
        switch($key) {
            case "update":
                  update(param1,param2,param3);
                  break;
            case "hide":
                  hide(param1);
                  break;
            case "show":
                  show(param1);
                  break;  
        }    
    }
    

    如果你明白了,我想说的。。。解决这个问题的办法是什么?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Tommaso Barbugli    14 年前

    您可以使用jQuery每个函数,js如下:

    $.each(data, function(key, value) { 
      if(key cond){
      }
      else if (key cond){
      }
      ...
      ...
      else {
      }
    });
    
        2
  •  2
  •   strager    14 年前

    这不需要jQuery。jQuery提供了一个表示JSON对象的标准JavaScript对象。你想要的是微不足道的:

    var key, value;
    
    for (key in data) {
        if (!Object.prototype.hasOwnProperty.call(data, key)) {
            continue;
        }
    
        value = data[key];
    
        switch (key) {
            case 'update':
                // etc.
        }
    }
    
        3
  •  0
  •   Andy Groff    14 年前

    你快搞定了,只要解码然后你就可以访问它。这并不确切,您需要varôu转储解码的json并进行一些调整,但基本思想如下:

    $data = json_decode($_POST["requestSent"]);
    foreach($data as $key=>$value) {
        switch($key) {
            case "update":
                  update($value[0]->selector,$value[0]->attribute,$value[0]->value);
                  break;
            case "hide":
                  /*pass params here*/
                  break;
            case "show":
                  /*pass params here*/
                  break;  
        }    
    }