Как извлечь информацию из JSON с помощью jQuery - PullRequest
0 голосов
/ 19 апреля 2010

У меня есть ответ JSON, отформатированный из моего C # WebMethod с использованием JavascriptSerializer Class . В настоящее время я получаю следующий JSON из моего запроса:

{"d":"[{\"Lat\":\"51.85036\",\"Long\":\"-8.48901\"},{\"Lat\":\"51.89857\",\"Long\":\"-8.47229\"}]"}

У меня проблема с кодом ниже, и я надеюсь, что кто-то сможет пролить свет на это. Кажется, я не могу получить информацию из возвращенных мне значений. В идеале я хотел бы иметь возможность читать в значениях Lat и Long для каждой возвращаемой мне строки.

Вот то, что у меня сейчас есть:

$.ajax({
                    type: "POST",
                    url: "page.aspx/LoadWayPoints",
                    data: "{'args': '" + $('numJourneys').val() + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (msg) {
                        if (msg.d != '[]') {
                            var lat = "";
                            var long = "";
                            $.each(msg.d, function () {
                                lat = this['Lat'];
                                long = this['Long'];
                            });
                            alert('lat =' + lat + ', long =' + long);
                        }
                    }
                });

Я думаю, что проблема связана с форматированием JSON, но я могу ошибаться. Любая помощь будет великолепна.

Спасибо, Рич

Ответы [ 4 ]

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

То, что происходит, - это кодирование JSON внутри строки в вашем JSON. Это избыточно, но есть решение без изменения метода вывода.

Для этого в jQuery есть JSON-анализатор (<a href="http://api.jquery.com/jQuery.parseJSON/" rel="nofollow noreferrer">$.parseJSON()</a>), который вы можете использовать для анализа строки в ответе.

Так что я верю, что вы сделали бы это так:

$.ajax({
                type: "POST",
                url: "page.aspx/LoadWayPoints",
                data: "{'args': '" + $('numJourneys').val() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if (msg.d != '[]') {
                        var content = $.parseJSON(msg.d);

                        var lat = "";
                        var long = "";
                        $.each(content, function () {
                            lat = this['Lat'];
                            long = this['Long'];
                        });
                        alert('lat =' + lat + ', long =' + long);
                    }
                }
            });
1 голос
/ 19 апреля 2010

Похоже, ваш JSON неправильно построен:

{"d":"[{\"Lat\":\"51.85036\",\"Long\":\"-8.48901\"},{\"Lat\":\"51.89857\",\"Long\":\"-8.47229\"}]"}

Вероятно, должно быть:

{"d":[{"Lat":"51.85036","Long":"-8.48901"},{"Lat":"51.89857","Long":"-8.47229"}]}

Обратите внимание на {"d":"..."}? похоже, что ваши "d" указывают на строку, а не на массив.

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

Я думаю, вам нужно что-то подобное:

$.ajax({
    type: "POST",
    url: "page.aspx/LoadWayPoints",
    data: "{'args': '" + $('numJourneys').val() + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        $.each(msg.d, function () {
            var lat = "";
            var long = "";
            lat = this.Lat; // Lat/Long this is how you called it in your JSON responce
            long = this.Long;
            alert('lat =' + lat + ', long =' + long);
        });
    }
});

надеюсь, это поможет

  • также, как xyld , упомянутое выше, посмотрите на свой JSON
0 голосов
/ 19 апреля 2010

Пожалуйста, попробуйте это:

 $.each(msg.d, function () {
                                lat = this['Lat'];
                                long = this['Long'];
                            });

После прохождения JSON нет MapLatPosition или MapLongPosition

НТН

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