2015-09-05 44 views
0

我想通過使用ajax將數據從我的js文件傳遞到php文件(如下圖所示)。通過ajax發送數據到js後的php - error

我檢查了PHP錯誤日誌,看到我通過POST發送的數據無法被PHP識別(正在嘗試獲取非對象的屬性錯誤)。

如果在最後一行失敗,當我引用$ json-> func時,我還在下面發佈了我的php代碼。

我在做對吧?我已經看到了一些使用jquery的post函數的例子,但是我喜歡ajax方式的成功和錯誤,所以我一直試圖堅持下去。

感謝幫助:)

JS:

$.ajax({ 
      type: "POST", 
      url: url, 
      dataType : "json", 
      data: {func:'getSummId' ,summName: summonerName}, 
      success: function(json){ 
          //bla bla bla 
      } 
      error: function(){ 
          //bla bla bla 
      } 

PHP:

<?php 
     header("Content-Type: application/json", true); 
     header("Access-Control-Allow-Origin: *"); 
     $client_data = file_get_contents("php://input"); 
     $json = json_decode($client_data); 
     switch ($json->func) { 
     ... 
+1

我想你想在你的'php'中是'$ _POST'? – roullie

+0

試試'$ json - > {'func'}'。 – icecub

+0

'data:JSON.stringify({func:'getSummId',summName:summonerName}),' –

回答

2

dataType是指返回的數據,而不是你如何發送數據。 所以你的數據將是在$_POST全局變量,並使用PHP://輸入不會在這種情況下,與json_decode工作

所以,你既可以使用

$func = $_POST['func']; 
$summName = $_POST['summName']; 

或者你可以嘗試設置在您的jQuery Ajax請求的內容類型選項(雖然我從來沒有嘗試過這個,所以你將不得不測試它)

$.ajax({ 
    type: "POST", 
    url: url, 
    contentType: "application/json", 
    dataType : "json", 
    data: {func:'getSummId' ,summName: summonerName}, 

contentType沒有設置默認爲

application/x-www-form-urlencoded; charset=UTF-8 

PHP自動將該類型的請求分析到$ _GET/$ _ POST/$ _ REQUEST全局變量中。 PHP本身並不知道如何自動解析發送給它的應用程序/ json請求。所以當想要發送請求數據爲json時,你必須自己閱讀php://input

+0

這是行得通的。謝謝! 雖然,那和php://輸入有什麼區別? 我在使用$ http之前使用過php://輸入角度... – Mapisto

+0

查看已更新的答案,至於它使用角度,它可以通過檢測您傳遞的數據對象的類型自動設置內容類型標題$ HTTP –

0

嘗試改變:type: "POST"method: "POST"

+1

'type'是'method'的別名。 –