Не удалось получить JSON с помощью jquery .each - PullRequest
0 голосов
/ 27 декабря 2010
{"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 указанного выше формата с двумя полями, одним подкачкой и одним массивом данных.

Я могу получить значения подкачки, но я не могу получить значения данныхмассив с функцией .each из jquery.

Любые предложения или предложения действительно приветствуются.

$.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 голосов
/ 27 декабря 2010

Хорошо, вот два примечания:
1.Первое, что вы должны использовать result.Data, а не result.jsonData

2. поле Data содержит массив объектов, которые вы вам 'Вам придется зацикливаться на нем или использовать индексы

3. Если в поле Data не будет содержаться более одного элемента, тогда нет необходимости в методе $.each, поэтому вы можете легко использовать:
result.Data[0].fundId ..etc
Но так как это массив объектов, я бы предположил, что он может содержать больше элементов, поэтому каждый из них необходим, но не так, как вы его используете, вместо этого используйте this

0 голосов
/ 27 декабря 2010

Я предполагаю, что вам нужно изменить часть данных с:

data: {action: action}

На:

data: {"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 кодировать все, что приходит.

0 голосов
/ 27 декабря 2010

При проверке JSON может возникнуть ошибка, проверьте Json Lint , поскольку JSON сложен.

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