2010-04-23 64 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