跨域ajax POST到web-api总是返回空响应

b24*_*b24 2 c# asp.net-mvc jquery cross-domain asp.net-web-api

我想将HTML表单发布到web-api.

如果我在其他域中使用jQuery执行ajax POST一切正常,我收到200 OK 在firebug和response选项卡中我收到如下图所示的空白响应.这是我的jQuery代码:

var formData = new FormData($('form')[0]);
                var response = '';
                $.ajax({
                    url: 'http://localhost:2143/api/controller',
                    type: 'POST',
                    // Form data
                    data: formData,
                    //Options to tell JQuery not to process data or worry about content-type
                    cache: false,
                    contentType: false,
                    processData: false,
                    success : function(text)
                     {
                         response = text;
                         alert(response);
                     }
                });
Run Code Online (Sandbox Code Playgroud)

请帮我...

Dar*_*rov 5

由于same origin policy restriction内置浏览器,因此不允许执行跨域AJAX调用.您有几个可能的解决方法:

  1. JSONP - 这里的想法是您的服务器将JSON响应包装在回调中.这仅适用于GET请求,因此从我可以看到您尝试发送POST请求的情况来看,它可能不适合您的情况.您可以使用自定义JsonpMediaTypeFormatter,如下所示this similar post.
  2. CORS- 服务器应发送特殊Access-Control-Allow-Origin响应HTTP标头.这里的缺点是旧浏览器可能不支持它.这里有blog post更详细的介绍.
  3. 服务器端桥.如果之前的两种技术由于它们所施加的限制而无法为您工作,那么您可以在托管您的javascript的域上拥有服务器端脚本,该脚本将充当您的域与托管API的远程域之间的代理.在这种情况下,您将AJAX请求发送到您自己的域,然后该域将调用远程API并将结果返回给客户端.