Jquery如何从复杂的JSON字符串中获取信息

时间:2012-11-17 19:11:40

标签: jquery ajax json

请我有这样的表格:

<form>

    <p>
      <label for="field_userAddress">Adresse (*)</label>
      <input type="text" name="userAddress" id="field_userAddress"  />
    </p>
    <p>
      <label for="field_userCP">CP (*)</label>
      <input type="text" name="userCP" id="field_userCP"  />
    </p>
    <p>
      <label for="field_vars[1]">vars one (*)</label>
      <input type="text" name="vars[1]" id="field_uservars[1]"  />
    </p>
    <p>
      <label for="field_vars[2]">Vars two (*)</label>
      <input type="text" name="vars[2]" id="field_vars[2]"  />
    </p>


</form>

我希望使用AJAX控制字段,所以我在php端完成了工作,最后我以这种方式请求使用JQuery json字符串:

{
    "status": 0,
    "err": {
        "userAddress": "required",
        "userCP": "required"
    },
    "errr": {
        "vars": {
            "1": "required",
            "2": "required"
        }
    }
}

我想在相关字段前面显示每条消息。

因此,对于第一个“错误”,我使用了这些行并且它有效:

$.each(r.err,function(k,v)
                        {
                            form.find('[name='+k+']').closest('p').append(v);
                        });

但是对于第二个“错误”,我尝试了这些行:

$.each(r.errr.vars,function(y,z)
                        {
                            form.find('[name="'+y+'['+z+']"'+']').closest('p').append(z);
                        }); 

它不起作用!

我发现这对我来说有点复杂。请问任何建议?

3 个答案:

答案 0 :(得分:0)

我认为你遗漏了json的一部分内容。如果你想要各种必需的字段,你应该只需要一个名为required的json数组。

{
   "err": {
     "required": ["userAddress", "userCP"]
   },

   "errr": {
     "vars": {
       "required": ["1", "2"];
     },
   }
}

如果你想解析这个

$。each(r.err,function(k,v)   {     $('form [name ='+ v +']')。nearest('p')。append(k);   });

答案 1 :(得分:0)

你需要转义属于每个jQuery选择器转义规则名称一部分的[]

这应该有效:

$.each(r.errr.vars,function(y,z) {
        form.find('input[name="vars\\['+y+'\\]"]').closest('p').append(z);
}); 

API文档http://api.jquery.com/category/selectors/

阅读有关逃避的最新段落

答案 2 :(得分:0)

我建议您使用ID来定位特定的输入字段并移交错误消息。而不是在id属性中使用[]我建议做这样的事情:

HTML:

<form>
    <p>
      <label for="field_userAddress">Adresse (*)</label>
      <input type="text" name="userAddress" id="field_userAddress"  />
    </p>
    <p>
      <label for="field_userCP">CP (*)</label>
      <input type="text" name="userCP" id="field_userCP"  />
    </p>
    <p>
      <label for="field_vars_1">vars one (*)</label>
      <input type="text" name="vars[1]" id="field_vars_1"  />
    </p>
    <p>
      <label for="field_vars_2">Vars two (*)</label>
      <input type="text" name="vars[2]" id="field_vars_2"  />
    </p>
</form>​

JavaScript的:

$.each(r.errr.vars,function(y,z) {
    form.find('input#field_vars_'+y).parent().append('<span>'+z+'</span>');
});

工作得很好。 // http://jsfiddle.net/bbSw9/