2017-05-26 81 views
-2

我已經建立了一個基本的API,我知道它的工作,因爲與郵遞員來的請求通過正常,我有麻煩的是通過AJAX傳遞到PHP文件的JSON對象。傳遞JSON對象與AJAX到PHP

的AJAX部分

function add_book(){ 
    if(validate()){ 
     var jsonData = {}; 
     jsonData.Price = document.getElementsByName("Price")[0].value; 
     jsonData.Title = document.getElementsByName("Title")[0].value; 
     jsonData.Author = document.getElementsByName("Author")[0].value; 
     jsonData.Genre = document.getElementsByName("select_dropdown")[0].value; 
     alert(JSON.stringify(jsonData)); 
      var request = new XMLHttpRequest(); 
      var url = "/books.php"; 
      request.open("POST", url, true); 
      request.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
      request.onreadystatechange = function() { 
       if (request.readyState == 4 && request.status == 200) { 
       } 
      } 
      request.send(jsonData); 
     } 
} 

例如,這是警告我從字符串化對象
{ 「價格」 得到 「23」, 「標題」: 「asdas」, 「作者」: 「dasda」,「Genre」:「科幻小​​說」}
我基本上可以將這個字符串複製/粘貼到郵遞員,它的工作原理如下。現在
到PHP的一部分

$json_str = file_get_contents('php://input'); 
$json_obj = json_decode($json_str); 
if(!empty($json_obj->Price) && !empty($json_obj->Genre) && !empty($json_obj->Author) && !empty($json_obj->Title)){ 

的,如果總是返回false,而它不應該,郵遞員再次請求傳遞真正的。

============================================== ==========================編輯:
我設法找到問題的根源。我做了一個函數來檢查json是否有效,結果不是,在php部分沒有問題,因爲它結果。這裏是萬一有人功能需要它/奇觀:

function isValidJSON($str) { 
    json_decode($str); 
    return json_last_error() == JSON_ERROR_NONE; 
} 

============================== ===========================================編輯2:
問題在request.send(jsonData);部分。修復它與request.send(JSON.stringify(jsonData));

感謝您的時間!

+0

沒有足夠的代碼在這裏幫助,尤其是PHP。你能獲得文件內容嗎? –

+0

如果在'if'語句之前執行'var_dump($ json_obj);'之前會打印什麼?但與瀏覽器,而不是郵遞員。 – matiaslauriti

+0

感謝您的回答,我設法找到了問題的根源。 我做了一個函數來檢查JSON是否有效,結果不是,在PHP部分沒有問題,因爲它變成了 –

回答

1

這就是問題 $ JSON海峽=的file_get_contents( 'PHP://輸入');

帖子參數應該被$_POST訪問。

相反試試這個

$json_str = $_REQUEST['jsonData']`; 

,也做了var_dump$json_str

+0

你發起alert alert alert(JSON.stringify(jsonData));',但你永遠不會發送數據。 'jsonData'仍然是javascript的對象 – nperez9

+0

未定義的索引jsonData –

+0

您的評論導致解決方案,非常感謝 –

0

這有幫助嗎?

$json_str = file_get_contents('php://input'); 
    $json_obj = json_decode($json_str); 
    if(!empty($json_obj['Price']) && !empty($json_obj['Genre']) && !empty($json_obj['Author']) && !empty($json_obj['Title'])){ 
+0

我用$ json_str換了$ json_obj,但那也沒用,但郵遞員請求不再傳遞爲真 –

+0

我更新了代碼..現在它工作嗎? – Praveen

+0

嘗試郵遞員給我這個錯誤 不能使用stdClass類型的對象作爲數組中的.... 嘗試使用ajax仍然給出錯誤 –

0

我認爲這個問題是file_get_contents()函數。也許你會試着迴應它。 而爲,如果你可以寫:

if (!(empty($json_obj->Price) && empty($json_obj->Genre) && empty($json_obj->Author) && empty($json_obj->Title))) 
+0

感謝您的答覆。 Php迴應[對象對象]並且您提供的解決方案不起作用, –