2013-11-10 226 views
0

另一個JSON相關的問題,不幸的是...發送JSON數據到服務器jquery.ajax

考慮以下JSON

[{"details":{ 
"forename":"Barack", 
"surname":"Obama", 
"company":"government", 
"email":"[email protected]", 
"files": [{ 
     "title":"file1","url":"somefile.pdf" 
     }, 
     { 
     "title":"file2", 
     "url":"somefile.pdf" 
     }] 
} 
}] 

我需要將此數據發送到PHP腳本我的服務器上,然後互動與它在服務器上,但不知道如何。

我發送它通過jquery.ajax和它被罰款(沒有錯誤信息),並繼承人的代碼。 (newJson是我創建如上正是我的JSON對象)

$.ajax({ 
type: "POST", 
url: "test.php", 
dataType: 'json', 
data: newJson, 
success: function(msg) 
    { 
    alert(msg); 
    }, 
error: function(jqXHR, textStatus) 
    { 
    alert(textStatus); 
    } 
}); 

所以在我的PHP腳本,到目前爲止,我只是想回顯內容,顯示在成功警報字符串

<?php 
header('Access-Control-Allow-Origin: *'); 
echo $_POST; 
?> 

但這只是給我一個解析錯誤..所以任何想法你美好的人?

+0

什麼是分析錯誤? – phatskat

+0

多數民衆贊成說,整個郵件只是解析錯誤 - 多數民衆贊成在消息出現在警報 –

+0

只是「解​​析錯誤?」嘗試將'error_reporting(E_ALL);'添加到PHP腳本的頂部,看看它是否能告訴你更多。 – phatskat

回答

2

你必須有一個鍵/值對與$_POST[key]收到在PHP中的數據。發送你全部由自己的陣列是不是最好的方法,因爲你已經有了結構反對

我會解開外陣列,因爲你只發送一個物體裏面

那麼物體看起來像

{"details":{ 
"forename":"Barack", 
"surname":"Obama", 
"company":"government", 
"email":"[email protected]", 
"files": [{ 
     "title":"file1","url":"somefile.pdf" 
     }, 
     { 
     "title":"file2", 
     "url":"somefile.pdf" 
     }] 
} 
} 

在php將收到與$_POST['details']。不要轉換爲JSON,只需將整個對象傳遞給$.ajax data屬性即可。

如果從阿賈克斯得到parserror,是在接收端和聽起來像或者正從PHP 500 eror或不發回JSON你dataType

+0

到目前爲止很好,那麼我將如何訪問每個元素,例如我將如何創建一個包含forename的變量?編輯:在PHP我應該加 –

+1

'$ forenanme = $ _POST ['details'] ['forename'];'。在'$ details'這樣的變量中存儲'$ _POST ['details']',以使'$ details ['forename'];' – charlietfl

+0

可以循環遍歷'details ['files']'作爲普通的php數組 – charlietfl

0

因爲您沒有通過JSON作爲一個領域,你可以這樣做:

<?php 
    $post = file_get_contents("php://input"); 
    $json = json_decode($post); 
    var_dump($json); // Should be a nice object for you. 
1

首先如預期,原來的JSON字符串格式錯誤的。嘗試

{ 
    "details":{ 
    "forename":"Barack", 
    "surname":"Obama", 
    "company":"government", 
    "email":"[email protected]", 
    "files": [ 
     { "title":"file1","url":"somefile.pdf" }, 
     { "title":"file2","url":"somefile.pdf"} 
    ] 
    } 
} 

其次,發送到PHP的數據已經被解析到一個數組中,但不是在JSON中。要回顯,您必須使用json_encode將數組轉換回JSON字符串

echo json_encode($_POST); 
exit; 
+0

也是一個很好的答案,但我選擇charlietfl的答案,因爲他/她幫助我處理數據。 –