跨域CORS请求有问题

时间:2015-11-21 17:11:58

标签: javascript php ajax cors

我在Stackoverflow上看到了很多例子,但似乎没有任何工作。

我在前端使用PHP作为服务器端和Backbone.js。我可以做GET和POST请求,但似乎不能让PUT或DELETE工作。

我不是100%确定放置标题的最佳位置。我把它们放在两个地方。 .htaccess文件中有一个如下。

#Header always set Access-Control-Allow-Origin "http://www.fitnesstimer.dev"                   
#Header always set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
#Header always set Access-Control-Allow-Headers "origin, x-requested-with, Content-Type,X-Custom-Header"
#header always set Access-Control-Allow-Credentials "true"

然后在我的控制器的标题中,我有这个。

header('Access-Control-Allow-Origin: http://www.fitnesstimer.dev');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept,   Authorization, X-Request-With, X-Custom-Header');
header('Access-Control-Allow-Credentials: true');

我的AJAX调用看起来像这样。

        $.ajax({
        type: 'PUT',
        url: 'http://www.fitnesstimerapi.dev/user/deleteuser/' + userId,
        contentType: "application/json",
        xhrFields: {withCredentials: true },
        dataType: "text",
        success: function() {
            alert(  'User removed!' );
        },
        error: function( err ) {
            console.log( "ERROR: ", err );
        }
    });

我已尝试将PUT和DELETE作为类型,但都不起作用。我收到以下错误。

XMLHttpRequest cannot load http://www.fitnesstimerapi.dev/user/deleteuser/11. Response for preflight has invalid HTTP status code 404

非常感谢任何帮助。请不要将我链接到一些文档,因为我已经阅读了所有内容。在我决定来这里问之前,我做了大量的搜索和阅读。

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢jfriend00,我找到了答案。

我将它添加到我的index.php文件中。

// respond to preflights
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
  // return only the headers and not the content
  // only allow CORS if we're doing a GET - i.e. no saving for now.
  if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) &&
     $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'GET' &&
     isset($_SERVER['HTTP_ORIGIN']) &&
     is_approved($_SERVER['HTTP_ORIGIN'])) {
  header('Access-Control-Allow-Origin: *');
  header('Access-Control-Allow-Headers: X-Requested-With');
}
exit;

}

谢谢,这很有效!