2011-04-14 28 views
0

我是從我的ASP .NET網站使用JSON獲取以下jQuery的成功:jQuery的JSON調用ASP .NET網站在IE,但不能在Firefox或Chrome

$.ajax({ 
    type: 'POST', 
    url: '/blah/default.aspx/GetTestData', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function(output) { 
     var viewModel = $.parseJSON(output.d); 
     ko.applyBindings(viewModel); 
} 

});

然後使用Knockout庫來更新我的UI。 default.aspx中的服務器端代碼獲取數據如下。

[WebMethod] 
public static string GetTestData() 
{ 
    var viewModel = null; // Get viewModel data from elsewhere. 
    return new JavaScriptSerializer().Serialize(viewModel); 
} 

這在IE中正常工作,但是當我在Chrome和Firefox中嘗試時,JSON不會返回。我的斷點服務器端確實受到攻擊,所以web方法被調用,但是當它返回到瀏覽器時發生了一些事情。

我認爲它可能與在瀏覽器或網絡服務器端設置內容或MIME類型有關,但我還沒有運氣,有沒有人有任何建議?

回答

1

你可以通過讓頁面方法返回你的對象來避免序列化和解析。

因此,它看起來像:

[WebMethod] 
public static ViewModel GetTestData() 
{ 
    var viewModel = createOrGetMyViewModelObjectFromSomewhere(); 
    return viewModel; 
} 

在JavaScript端,它看起來像:

$.ajax({ 
    type: 'POST', 
    url: '/blah/default.aspx/GetTestData', 
    data: "{}", 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success: function (output) { 
     var viewModel = output.d; 
     ko.applyBindings(viewModel); 
    } 
}); 

所以,你不必序列化在.NET和你不需要在客戶端解析它。這一切都由雙方的「管道」來處理。另外,通過data: "{}"很重要(或者如果你需要參數,他們會去這裏)。另外,如果您正在調用Web服務而不是Page Method,那麼您需要用[ScriptService]屬性修飾類。

0

如果刪除contentType參數,該怎麼辦?

+0

我試過了,它在IE中也是如此。 webserver返回default.aspx頁面的所有標記,而不是返回JSON。 – gilles27 2011-04-14 10:24:28

0

嘿嘗試把空數據參數上述數據類型: 'JSON', 像下面

data: "{}", 
dataType: 'json', 

,會做一招!

+0

謝謝,但沒有奏效。 – gilles27 2011-04-14 12:42:05

0

我不明白。如果無法解析JSON字符串試試這個神奇的代碼:

var viewModel = eval('(' + data + ')'); 

其中data是從服務器的回覆。

相關問題