Проблема с JSON и jQuery - PullRequest
       38

Проблема с JSON и jQuery

2 голосов
/ 13 апреля 2010

Я звоню в веб-службу и возвращаю следующие данные в формате JSON:

[{"OrderNumber":"12345","CustomerId":"555"}]

В моем методе успеха веб-службы я пытаюсь проанализировать оба:

$.ajax({
    type: "POST",
    url: "MyService.asmx/ServiceName",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        var data = msg.d;
        var rtn = "";

        $.each(data, function(list) {
            rtn = rtn + this.OrderNumber + ", " + this.CustomerId + "<br/>";
        });

        rtn = rtn + "<br/>" + data;

        $("#test").html(rtn);
        }
    });

но я получаю кучу «неопределенных, неопределенных» строк, за которыми следует правильная строка JSON.Есть идеи почему?Я пытался использовать метод eval(), но это не помогло, так как я получил сообщение об ошибке, говорящее о том, что ']' ожидается.

Ответы [ 6 ]

1 голос
/ 14 апреля 2010

Когда вы делаете each(), вы, вероятно, получаете все правильные значения. Но сразу после этого вы объединяете data, то есть весь объект ответа (res.d.), в строку. Я не понимаю, как это может быть, что вы хотите. Сложные объекты, такие как те, которые вы можете перебрать с помощью $.each(), редко могут быть представлены в виде строк, просто объединяя их в существующую строку. Так что это должно вызвать некоторые ваши поддельные данные.

Кроме этого, я думаю, что это довольно смущает, что вы получаете ошибки, когда пытаетесь оценить значения. Я не думаю, что вам когда-либо нужно прибегать к решению eval, но, тем не менее, вы определенно должны быть способными к eval вашим данным. Если вы не можете, в вашем ответе что-то плохо искажено. Если eval(myVar) говорит, что ожидает ], то вы бы хотели предупредить myVar и дать нам полное значение этого.

0 голосов
/ 14 апреля 2010

Как это иронично ... Некоторое время назад у меня была похожая проблема ... Это сработало в моем случае.

function BuildTable(msg) {
 var table = '<table><thead><tr><th>First Name</th><th>Middle Name</th><th>Last       Name</th></thead><tbody>';
for (var i = 0, l = msg.length; i < l; i++)
{
  var person = msg[i];
  var row = '<tr>';
  row += '<td>' + person.FirstName + '</td>';
  row += '<td>' + person.MiddleName + '</td>';
  row += '<td>' + person.LastName + '</td>';
  row += '</tr>';
  table += row;
}
table += '</tbody></table>';
$('#Container').html(table);
}

текст ссылки

0 голосов
/ 14 апреля 2010

Наконец-то я заработал:

var data = eval('(' + msg.d + ')');

Я уверен, что это не здорово, но это работает. Если кто-то может указать причину, по которой это работает и / или решить мою проблему, я все равно буду признателен. :)

0 голосов
/ 14 апреля 2010

Предполагается, что вы используете вход как

[{"StreetAddress1": "123 Main St", "BusinessName": "ABC Inc", "OrderNumber": "987654"}, {"StreetAddress1": "75 Main St", "BusinessName": "Google "," OrderNumber ":" 654321 "}, {" StreetAddress1 ":" 27 Main St "," BusinessName ":" Microsoft "," OrderNumber ":" 123456 "}]

  1. eval (msg) должен использоваться. не знаю, почему вы используете msg.d
  2. this.CustomerID вернет неопределенное значение, так как в отклике JSon нет идентификатора customerID
0 голосов
/ 13 апреля 2010

Не уверен, что я что-то упустил, но если вы предупреждаете msg.d, значение не определено? Я думал, что первым параметром обратного вызова успеха были сами данные. Так что это может быть просто ...

msg.OrderNumber + ", ", + msg.CustomerId;

Если это массив, то это будет похоже на ответ Раджи.

$.each(data, function(list, item) {
    rtn = rtn + item.OrderNumber + ", " + item.CustomerId + "<br/>";
});
0 голосов
/ 13 апреля 2010

Я могу ошибаться, но может ли это быть так:

 rtn = rtn + list.OrderNumber + ", " + list.CustomerId + "<br/>";

НТН

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