我在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
非常感谢任何帮助。请不要将我链接到一些文档,因为我已经阅读了所有内容。在我决定来这里问之前,我做了大量的搜索和阅读。
谢谢!
答案 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;
}
谢谢,这很有效!