我有一个返回有效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
});
});
答案 0 :(得分:1)
将ajax中的网址更改为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中调用函数一样。
答案 1 :(得分:0)
JSONP响应必须包含在函数调用中,该函数调用在带有回调的请求中指定。
像
这样的东西callback({"name":"Joe"});
通常应该在过滤器上注意这一点。