2017-10-10 114 views
1

我正在使用移動應用程序。我需要獲取從WordPress的網站上的一些數據,但http請求總是通過錯誤爲預檢響應具有無效的HTTP狀態碼403Ionic 3 http發佈請求無效HTTP狀態代碼403,而jQuery ajax發佈完美工作

打字稿

this._http.post('http://www.example.com/wp-admin/admin-ajax.php',{ 
     'action' : 'get_votes', 
     'postId' : 123456 
    }) 
    .subscribe(data=>{ 
     console.log(data); 
    },error=>{ 
    console.log(error); 
    }) 

jQuery的

同樣的事情是在本地服務器上運行jQuery

$.ajax({ 
       url: 'http://www.example.com/wp-admin/admin-ajax.php', 
       type: 'post', 
       dataType: 'JSON', 
       data: { 
        'action': 'get_votes', 
        'postId': 123456 
       }, 
       success: function(result) { 
        console.log(result); 
       }, 
       error: function(error) { 
        console.log(error); 
       } 
      }); 

已安裝cordova-plugin-whitelist

config.xml中

<access origin="*" /> 
    <allow-intent href="http://*/*" /> 
    <allow-intent href="https://*/*" /> 

回答

1

如果您正在使用web browser測試,有你需要允許web browser起源訪問。與鉻使用插件和配置它https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

如果您正在使用真實設備,它仍然不工作嘗試使用header('Access-Control-Allow-Origin: *');與您的服務器端API文件。

更多信息here

+0

我已經安裝了Chrome的插件。另外,頭部('Access-Control-Allow-Origin:*');'在API中。我不知道角度'http'不工作。但是這個插件'cordova-plugin-advanced-http'完美運行。 – shah

0

可以使用離子代理角落找尋CORS問題的工作,

ionic.config.json

"proxies": [ 
    { 
     "path": "/api", 
     "proxyUrl": "http://www.example.com/wp-admin/admin-ajax.php" 
    } 
    ] 

,你叫它this.http.post("/api")

0

這是一個CORS(交叉域)問題。您的瀏覽器(不是Angular)在發送實際POST請求之前發送OPTIONS請求。實際上,您的服務器會丟棄OPTIONS請求,因爲未經過身份驗證(或您的情況禁止)。請閱讀this回答獲取更多信息。

您是否試圖將'content-type'標頭設置爲'application/x-www-form-urlencoded'或'multipart/form-data'?我認爲這會導致瀏覽器在發送POST請求之前不發送OPTIONS請求。 因此,即使您解決了第一個問題(由於缺少OAuth標頭),由於第二個問題,您仍可能無法POST。您可以嘗試安裝Chrome Allow-Control-Origin extension