2011-04-14 53 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是从服务器的回复。

相关问题