JQuery Ajax获取响应,但总是调用错误函数JSONP

时间:2013-09-27 01:16:50

标签: c# jquery cross-domain jsonp httplistenerrequest

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

2 个答案:

答案 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