我有一个HttpListenerContext类,它始终监听端口13001.当ajax调用到来时,我传递数据如下
context.Response.Close(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("jsonp({'Status':'Good'})")), false);
接下来,我使用Jquery ajax调用该服务器,如下所示
$.ajax({
url: "http://localhost:<13001>/hit/number',
type: "GET",
async: false,
contentType: "application/json",
dataType: "jsonp",
jsonp: "jsonp",
success: function (data, textStatus, xhr) {
console.log(data);
},
error: function (xhr, ajaxOptions, thrownError) {
console.log("Error");
}
});
Ajax获取请求获得成功,我能够在Chrome网络中看到响应 - &gt;响应标签如下
"jsonp({"Status":"Good"})"
但是我无法在Ajax Success函数中获得此消息。它总是显示错误。任何人都可以告诉我我错在哪里。
Response Headers
Access-Control-Allow-Origin:*
Cache-Control:private
Content-Length:23
Content-Type:application/javascript
Date:Fri, 27 Sep 2013 01:12:25 GMT
Server:Microsoft-HTTPAPI/2.0
答案 0 :(得分:0)
我的直觉告诉我你没有传回一个完整的HttpResponse。您只是传回一个文本字符串。由于它不是一个有效的HttpResponse,jQuery会认为它失败了。
解决方案:尝试在发送响应之前添加context.Response.StatusCode = 200;
。您可能还需要在响应中添加内容类型。
context.Response.StatusCode = 200;
context.Response.Close(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("jsonp({'Status':'Good'})")), false);
答案 1 :(得分:0)
我遇到oData服务的同样问题,它通过在url末尾添加“$ callback”关键字来解决。 所以ajax URL就像 https://example.com/ApplicationData.svc/Products $格式= JSON&安培;?$回调=
礼貌:http://www.kendoui.com/blogs/teamblog/posts/11-08-24/cross-domain_queries_to_odata_services_with_jquery.aspx