0

我有一个 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 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
4

2 回答 2

0

我在 oData 服务中遇到了同样的问题,它通过在 url 末尾添加“$callback”关键字来解决。所以 ajax URL 就像 https://example.com/ApplicationData.svc/Products ?$format=json&$callback=?

礼貌:http ://www.kendoui.c​​om/blogs/teamblog/posts/11-08-24/cross-domain_queries_to_odata_services_with_jquery.aspx

于 2013-10-31T06:33:11.727 回答
0

我的直觉告诉我,您没有传回完整的 HttpResponse。你只是传回一个文本字符串。由于它不是一个有效的 HttpResponse,jQuery 会认为它失败了。

context.Response.StatusCode = 200;解决方案:在发送响应之前尝试添加它。您可能还需要在响应中添加内容类型。

 context.Response.StatusCode = 200;                
 context.Response.Close(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject("jsonp({'Status':'Good'})")), false);
于 2013-09-27T02:43:40.847 回答