使用jquery .each,json检索失败

时间:2010-12-27 19:41:04

标签: javascript jquery json

{"paging":
    {"pageNum":2,
     "action":"Next",
     "type":"",
     "availableCacheName":"getAllFunds",
     "selectedCacheName":"",
     "showFrom":101,
     "showTo":200,
     "totalRec":289,
     "pageSize":100},

 "Data": [{"sourceCodeId":0,
           "radio_fund":"individual",
           "availableFunds":[],
           "fundId":288,
           "searchName":[],
           "fundName":"Asian Equity Fund A Class Income",
           "srcFundGrpId":"PGI",
           "firstElement":0,
           "lastElement":0,
           "totalElements":0,
           "pageList":[],
           "standardExtract":true}]
}

我有上面格式的json文件,有两个文件,一个是分页,一个是数据数组。

我能够检索分页的值,但是我无法使用jquery的.each函数检索数据数组的值。

任何建议或意见真的很感激。

$.ajax({ url: "list.pubfw", 
         data :{action:action},
         dataType: "json",
         type:"POST",
         success: function(result){
                      var options = '';
                      $.each(result, function(){ 
                          options += '<option value="' + 
                              result.jsonData.fundId + '">' + 
                              result.jsonData.fundId + "-" + 
                              result.jsonData.fundName + "-" + 
                              result.jsonData.srcFundGrpId + '</option>'; 
                      }); 

                      $("#selectCol").empty(); 
                      $("#selectCol").html(options); 
                  }, 
         error: function(xmlHttpRequest, textStatus, errorThrown){
                    alert("ERROR"+errorThrown);
                    alert("STAT"+textStatus);                  
                    alert("xmlHttpRequest"+xmlHttpRequest); 
                } 
     });

3 个答案:

答案 0 :(得分:0)

JSON验证中可能存在错误,请检查Json Lint,因为JSON很棘手。

答案 1 :(得分:0)

好的,这里有两个注释:
1.首先,您应该使用result.Data而不是result.jsonData

2. Data字段包含一个对象数组,您必须在其上循环或使用索引

3.如果Data字段不能容纳多个项目,则不需要$.each方法,因此您可以轻松使用:
result.Data[0].fundId ..等 但是因为它是一个对象数组,所以我认为它可能包含更多项目,因此每个项目都需要但不是你使用它的方式,而是使用this

答案 2 :(得分:0)

我的猜测是你需要更改数据部分:

data: {action: action}

要:

data: {"action": action}

这样,在服务器端,您可以检查进入请求的“action”属性,而不是将属性名称作为其值的变量。

另外,我会将您的成功功能更改为:

success: function(result){
                  var selectCol = $('#selectCol');
                  selectCol.empty();

                  $.each(result, function(){
                      var option = $('<option/>');
                      option.val(result.jsonData.fundId);
                      option.text(
                          result.jsonData.fundId + "-" + 
                          result.jsonData.fundName + "-" + 
                          result.jsonData.srcFundGrpId);

                      selectCol.append(option);
                  }); 
              }

这不会构建(可能)非常大的字符串,使用text()比使用html()更安全,因为html()只会插入以html形式出现的内容,你容易受到XSS攻击。 text()将html编码所有内容。