JSON请求使用JQUERY返回对象错误

我有一个返回有效JSON的aspx页面 – 但是当通过JQUERY调用时,我可以在Fiddler中看到返回了JSON但是抛出了错误[对象错误]。

protected void Page_Load(object sender, EventArgs e) { string json = "{\"name\":\"Joe\"}"; Response.ClearHeaders(); Response.ClearContent(); Response.Clear(); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/json"; Response.ContentEncoding = Encoding.UTF8; Response.Write(json); Response.End(); } 

使用此页面的html页面位于不同的域中,我使用的是jsonp。

 function jsonpCallback(response){ alert(response.data); } $(document).ready(function(){ $.ajax({ url: 'http://localhost:30413/getprice.aspx', dataType: 'jsonp', error: function(xhr, status, error) { alert(error); }, success: jsonpCallback }); }); 

当请求aspx页面时,有效的JSON返回给浏览器,当进行JQUERY调用时,返回JSON但是没有调用回调函数,并且预期“;” JS错误然后显示[对象错误]消息。 以下是请求和回复。

我已经尝试了相同结果的请求的每个变体。 我正在使用下面的请求JQUERY示例,因为它适用于下面显示的最后一个示例。

 GET http://localhost:30413/price.aspx?callback=jQuery17105556924406763212_1338876162569&_=1338876162581 HTTP/1.1 Accept: application/javascript, */*;q=0.8 Referer: http://alpha.tigerdirect.com/applications/b2b/varinfo.asp Accept-Language: en-US User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) Accept-Encoding: gzip, deflate Host: localhost:30413 Connection: Keep-Alive Pragma: no-cache Cookie: ASP.NET_SessionId=d4pje2hgm2beznslfpp4pii5 HTTP/1.1 200 OK Server: ASP.NET Development Server/10.0.0.0 Date: Tue, 05 Jun 2012 06:02:42 GMT X-AspNet-Version: 4.0.30319 Cache-Control: no-cache Pragma: no-cache Expires: -1 Content-Type: application/json; charset=utf-8 Content-Length: 14 Connection: Close {"name":"Joe"} 

此示例有效

 function jsonpCallback(response){ alert(response.data); } $(document).ready(function(){ $.ajax({ url: 'http://api.bitbucket.org/1.0/repositories/retroviz/webformsthemeswitcher/src/tip/.hgignore', dataType: 'jsonp', error: function(xhr, status, error) { alert(error); }, success: jsonpCallback }); }); 

将ajax中的url: http://localhost:30413/getprice.aspx?callback=?更改为url: http://localhost:30413/getprice.aspx?callback=?

 if(Request.QueryString['callback']!=null){ string callback = Request.QueryString['callback']; string json = "{\"name\":\"Joe\"}"; Response.ClearHeaders(); Response.ClearContent(); Response.Clear(); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/json"; Response.ContentEncoding = Encoding.UTF8; Response.Write(callback + "(" + json + ")"); Response.End(); } 

在jsop中,我们在callback函数调用中包装响应。 就像我们在javascript中调用函数一样。

JSONP响应必须包含在函数调用中,该函数调用在带有回调的请求中指定。

就像是

 callback({"name":"Joe"}); 

通常应该在filter上注意这一点。