2010-04-23 65 views
1

我有这个脚本调用.NET的WebServiceJQuery的AJAX的responseText以JSON

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 
); 

我收到的msg变量以下值:

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

我不知道为什么这将以这种方式格式化,似乎只在responseText中执行此操作。

有没有人有任何想法?

+1

您不应该使用同步AJAX调用;他们会完全冻结浏览器。 – SLaks 2010-04-23 22:07:13

+0

问题是我在绘制地图上的位置数据的循环语句中。 – BoredOfBinary 2010-04-23 22:11:16

回答

2

正如SLaks提到的,同步AJAX是一个非常糟糕的主意®。如果您要循环播放要在地图上绘制的项目,则无论如何您都不希望为任何项目发起服务器调用,否则由于所有内容的累积延迟,您将获得绝对可怕的性能,而且不仅仅是一些项目往返。

一个更好的方法是将一个componentId的数组提交给您的服务器。然后,服务器可以遍历ID数组并返回经纬度数组,并返回您在地图上绘制的任何其他数据。

$.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 
    }); 

你也可能想看看this plugin这使得调用从jQuery的更容易一些ASMX服务。

+0

谢谢乔希,我会尝试。 – BoredOfBinary 2010-04-23 22:25:57

0

要直接回答你的问题 - 你正在解析json两次 - 一次是因为你指定了dataType:'json',并再次用$ .toJSON解析。您可以将数据类型更改为“文本”,它将解决您的问题。

虽然正确答案是使用带回调的异步调用。别人已经回答了这个问题,因为我一直在打字,所以看他们的答案,而不是:)

- 编辑 -

为了回答您的意见(因为格式化并没有真正在工作的意见)。您不需要将数据串联起来 - 您可以将它作为对象发送。在函数之前不需要声明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); 
    } 
}); 

一旦你得到了味精的数据,我猜你想将它添加到列表中,那么你会说这就是重绘地图上的位置数据的功能。

+0

对不起,我只是似乎没有得到这个。所以我打开异步,(这是有道理的),我写了一个函数的成功属性。 – BoredOfBinary 2010-04-23 23:09:55

+0

var msg,list,jsonText; list = [994,994,994,994]; jsonText = JSON.stringify({componentIdCollection:list}); $ .ajax({type:“POST”, url:“http://www.eaglerider.com/ETS.UI/WebServices/LocationService。asmx/GetMappingLocationDetails“, contentType:”application/json;字符集= UTF-8" , 数据:jsonText, 异步:真, 数据类型: “JSON”, sucess:函数(MSG){ 警报( '耶'); }}); – BoredOfBinary 2010-04-23 23:10:20