我有一个 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 网络>响应选项卡中看到响应,如下所示
"jsonp({"Status":"Good"})"
但是我无法在 Ajax 成功函数中收到此消息。它总是显示错误。谁能告诉我我哪里做错了。
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
我的直觉告诉我,你没有传回一个完整的HttpResponse。 您只是传回一个文本字符串。 由于它不是一个有效的HttpResponse,jQuery会认为它失败了。
解决方案:在发送响应之前尝试添加context.Response.StatusCode = 200;
此项。 您可能还需要向响应添加内容类型。
context.Response.StatusCode = 200;
context.Response.Close(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("jsonp({'Status':'Good'})")), false);
我在使用oData服务时遇到的相同问题,通过在URL末尾添加"$callback"关键字来修复它。所以 ajax URL 会像https://example.com/ApplicationData.svc/Products?$format=json&$callback=?
礼貌 :http://www.kendoui.com/blogs/teamblog/posts/11-08-24/cross-domain_queries_to_odata_services_with_jquery.aspx