JQuery AJAX responseText к JSON

У меня есть этот сценарий, который называет .net WebService

msg = $.toJSON(
        $.ajax({
            type: "POST",
            url: "http://[url]/ETS.UI/WebServices/LocationService.asmx/GetMappingLocationDetails",
            contentType: "application/json; charset=utf-8",
            data: $.toJSON({'componentId':994}),
            dataType: "json",
            async: false
        }).responseText
);

И я получаю следующее значение в переменной сообщения:

""{\"d\":\"{\\\"ComponentId\\\":994,\\\"Latitude\\\":32.219627009236405,\\\"Longitude\\\":-110.96843719482422,\\\"LocationName\\\":\\\"Tucson\\\",\\\"StreetAddress\\\":\\\"7201 E 22nd Street \\\",\\\"City\\\":\\\"Tucson\\\",\\\"State\\\":\\\"AZ\\\",\\\"PostalCode\\\":null}\"}""

Я понятия не имею, почему это отформатировало бы этот путь, кажется, только делает это в responseText.

У кого-либо есть какие-либо идеи?

1
задан Doug Porter 23 April 2010 в 22:04
поделиться

2 ответа

Как упоминал SLaks, синхронный AJAX - очень плохая идея ® . Если вы зацикливаете элементы для нанесения на карту, вы в любом случае не хотите вызывать сервер для каждого элемента - вы получите абсолютно ужасную производительность с более чем парой элементов из-за совокупной задержки всех круглые поездки.

Гораздо лучшим методом было бы отправить массив из componentId на ваш сервер. Затем сервер может перебирать массив идентификаторов и возвращать массив широты / долготы и все остальное, что вы можете нанести на карту.

    $.ajax({ 
        type: "POST", 
        url: "http://[url]/ETS.UI/WebServices/LocationService.asmx/GetMappingLocationDetails", 
        contentType: "application/json; charset=utf-8", 
        data: $.toJSON([{'componentId':994},{'componentId':995}, ... ]), 
        dataType: "json", 
        async: true,
        success: callbackFunctionThatPlotsReturnedPoints
    });

Вы также можете попробовать этот плагин , который упрощает вызов служб ASMX из jQuery.

2
ответ дан 3 September 2019 в 01:04
поделиться

Чтобы ответить на ваш вопрос напрямую - вы дважды анализируете json - один раз, потому что вы указываете dataType: 'json', и снова с помощью $ .toJSON. Вероятно, вы можете изменить тип данных на «текст», и это решит вашу проблему.

Правильный ответ - использовать асинхронный вызов с обратным вызовом. Кто-то еще ответил на вопрос, когда я набирал текст, поэтому посмотрите на его ответ:)

- edit -

Чтобы ответить на ваши комментарии (потому что форматирование в комментариях не работает). Строковые данные не требуются - их можно отправить как объект. Нет необходимости объявлять переменную msg перед функцией. По умолчанию используется асинхронный режим, поэтому вы можете просто не использовать его.

var list = [994, 994, 994, 994]; 
$.ajax({ 
  type: "POST", 
  url: "http://www.eaglerider.com/ETS.UI/WebServices/LocationService.asmx/GetMappingLocationDetails", 
  contentType: "application/json; charset=utf-8", 
  data: { componentIdCollection: list },
  dataType: "json", 
  sucess: function(msg){
    // msg holds your JSON data
    console.log(msg); 
  }
});

Как только у вас есть эти данные msg, я предполагаю, что вы хотите добавить их в список, тогда вы должны вызвать функцию, которая перерисовывает данные местоположения на карте.

0
ответ дан 3 September 2019 в 01:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: