JQuery Ajax 获得响应,但始终调用错误函数 JSONP



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

相关内容

  • 没有找到相关文章