2015-06-22 76 views
0

我很長時間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插件做不同? ...

+0

Firefox擴展不必遵循同源策略,任何在頁面上運行的JavaScript都會執行。問題可能是由於設置了'async:false',請嘗試將其設置爲'true'並看看會發生什麼。 – idbehold

+0

感謝您的幫助,但這並沒有解決它,與以前相同的錯誤 – Jan

+0

嘗試將下面的代碼放入ajax .... contentType:'application/x-www-form-urlencoded', –

回答

1

看來你忘了在標題中添加方法。 1

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, POST');