2015-10-11 73 views
2

我正在使用Angular.js應用程序,我必須向PHP服務器發送POST請求。我發送的數據是對象的對象。

喜歡的東西:

var data = { 
    "serviceID": "0001", 
    "interpreterDetails": { 
     "firstName": "Peter", 
     "lastName": "Wilson", 
     "password": "Peter", 
     "rePassword": "Peter", 
     "address": "alex", 
     "mobPhone": "01224747748", 
     "homePhone": "3910009", 
     "mail": "[email protected]", 
     "fax": "556", 
     "hourlyRate": "10", 
     "OperatingSys": "android", 
     "token": "432132", 
     "dialectId": "1" 
    } 
} 

當我將使用這個對象的角度

$http({ 
    url: "http://localhost/saveInterpreter.php", 
    method: "POST", 
    data: $httpParamSerializer(data), 
    headers : { 
     "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8;" 
    } 
}) 

,並在服務器代碼返回

object(stdClass)#3 (9) { 
["interpreterDetails"]=> 
string(262) " {"firstName":"Peter","lastName":"Wilson","password":"Peter","rePassword":"Peter","address":"alex","mobPhone":"01224747748","homePhone":"3910009","mail":"[email protected]","fax":"556","hourlyRate":"10","OperatingSys":"android","token":"432132","dialectId":"1"}" 
["serviceID"]=> 
string(4) "0001" 
} 

,但預期收益

object(stdClass)#3 (8) { 
["serviceID"]=> 
string(4) "0001" 
["interpreterDetails"]=> 
object(stdClass)#4 (13) { 
["firstName"]=> 
string(5) "zxczc" 
["lastName"]=> 
string(4) "zxcz" 
["password"]=> 
string(4) "1234" 
["rePassword"]=> 
string(4) "1234" 
["address"]=> 
string(4) "sada" 
["mobPhone"]=> 
string(4) "4532" 
["homePhone"]=> 
string(4) "1351" 
["mail"]=> 
string(11) "[email protected]" 
["fax"]=> 
string(6) "123513" 
["hourlyRate"]=> 
string(2) "26" 
["OperatingSys"]=> 
string(0) "" 
["token"]=> 
string(0) "" 
["dialectId"]=> 
string(1) "1" 
} 
} 

問題是,對象內部(interpreterDetails)外部對象(數據)被返回爲字符串而不是對象。

注意任何幫助:當我使用jQuery它返回預期的結果

回答

2

這樣看來,它被JSON字符串化。

您可以使用json_decode()來提供預期的結果

$_POST['interpreterDetails'] = json_decode($_POST['interpreterDetails']); 

過程會使用默認$http作爲發送數據application/json,並使用json_decode(file_get_contents('php://input'))訪問PHP數據簡單。


編輯:如果你堅持形式編碼數據嘗試使用

data: $httpParamSerializerJQLike(data) 

我從來沒有使用過它,但通過它的建議,可能是遞歸的複製一樣jQuery的名字

1

我建議你不要使用:

"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8;" 

這會是一個更好的主意一起工作:

"Content-Type": "application/json" 

角將在data改造對象爲JSON:

角度提供了以下默認的轉換:

請求轉換($httpProvider.defaults.transformRequest$http.defaults.transformRequest):

如果請求配置對象的data屬性包含將其序列化爲JSON格式。

所以,你所要做的就是傳遞對象,它將自動由你轉換爲JSON。

data : data 

如果使用application/json,那麼你將不能夠把它撿起來,通過$_POST,但你可以通過PHP這樣做://輸入,更here

如果你堅持要用application/x-www-form-urlencoded

data : $httpParamSerializer({ jsonData : JSON.stringify(data) }) 

然後你只需要從PHP正常解析字符串(它填充$_POST['jsonData']

0

見的@MinusFour(更好的)答案

我認爲這個問題是httpParamSerializer

httpParamSerializer主要用於(?)到c onvert JSON數據到時發送GET請求

的URL例如PARAM格式){query: 'test'}?query=test

POST請求和data: httpParamSerializer(data)在請求的主體發送數據無論如何,這樣你就沒有什麼特別的需要將數據格式化爲http參數。

正如@charlietfl所提到的,它將您的內部對象字符串化並將其變爲字符串而不是尊重實際的對象格式。

您可以解析JSON(如charlie提到的)或嘗試刪除$ httpParamSerializer。

{ 
    ... 
    data: data, 
    ... 
}