2

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

如果我在其他域中使用 jQuery 执行 ajax POST,一切正常,我收到 200 OK ,但在萤火虫和响应选项卡中,我收到如下图所示的空白响应。这是我的 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);
                     }
                });

请帮我...

4

1 回答 1

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 并将结果返回给客户端。
于 2013-04-07T08:39:20.930 回答