我很長時間overflower並最終註冊。 我已經經歷了大量的線程,但沒有人可以幫我解決我的問題。 我即將在php中使用slim框架創建一個RESTful API,並且存在crossdomain put請求的問題。RESTful API - 跨域請求問題
讓我來簡單介紹一下我所做的事情。 經過第一次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代碼中設置訪問控制允許來源之後不讓它去?什麼是Firefox插件做不同? ...
Firefox擴展不必遵循同源策略,任何在頁面上運行的JavaScript都會執行。問題可能是由於設置了'async:false',請嘗試將其設置爲'true'並看看會發生什麼。 – idbehold
感謝您的幫助,但這並沒有解決它,與以前相同的錯誤 – Jan
嘗試將下面的代碼放入ajax .... contentType:'application/x-www-form-urlencoded', –