【发布时间】:2015-06-22 15:09:44
【问题描述】:
我是一个很长一段时间的溢出者,最终注册了。 我经历了很多线程,但没有一个可以帮助我解决我的问题。 我即将在 php 中使用 slim 框架创建一个 RESTful API,并且在跨域 put 请求时遇到问题。
让我简要介绍一下我所做的工作。 在编写了第一个 GET 请求后,我一直在寻找一种方法来轻松测试我的 API,并找到了“RESTClient”Firefox 插件,它运行良好,所以我继续使用它。 经过几次测试,我在另一台服务器上测试了自己编写的代码,问题就出现了。
跨源请求被阻止:同源策略不允许读取位于 %1$S 的远程资源。 (原因:CORS 预检通道未成功)。
我最想知道的是 Firefox 插件在任何时候发出请求都没有问题,它总是显示预期的响应。当我尝试通过自己的代码发送请求时,才发生上述错误。我阅读了很多有关跨域请求的信息,但没有任何帮助,希望您能做到。
现在首先让我向你展示我的苗条框架 php 代码
<?php
header('access-control-allow-origin: *');
header('Content-Type: application/json');
function output($arr){
echo json_encode($arr);
exit;
}
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app->put(
'/put',
function () {
$output = array("status"=>"200","message"=>"This is a put test");
output($output);
}
);
$app->run();
?>
还有我的 test.html
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script type="text/javascript">
(function($) {
var url = 'URL';
$.ajax({
type: 'put',
url: url,
async: false,
crossDomain:true,
dataType: 'json',
success: function(json) {
console.log(json);
},
error: function(e) {
console.log(e.message);
}
});
})(jQuery);
</script>
</body>
</html>
有人可以向我解释如何让这个 PUT 请求工作。我现在真的很绝望。我了解所有跨域主题,但为什么在我在 php 代码中设置 access-control-allow-origin 后他不放手? firefox插件有什么不同? ...
【问题讨论】:
-
Firefox 扩展不必遵循同源策略,任何在页面上运行的 javascript 都可以。问题可能是由于设置了
async: false,尝试将其设置为true,看看会发生什么。 -
感谢您的帮助,但这并不能解决问题,与以前相同的错误
-
尝试将以下代码放入 ajax.... contentType: 'application/x-www-form-urlencoded',
标签: php rest request cross-domain put