2015-10-11 3 views
2

Я работаю над приложением Angular.js, и я должен отправить запрос POST на сервер PHP. Данные, которые я отправляю, являются объектами объектов.

Что-то вроде:

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.


EDIT: Если вы настаиваете на форме закодированных данных пытаются использовать

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 «s

Я думаю, что вопрос с httpParamSerializer

httpParamSerializer используется в основном (?) -с onvert данных JSON в формат URL пар при отправке GET запрашивает

Примера) {query: 'test'} к ?query=test

запрос POST и data: httpParamSerializer(data) посылают данные в теле запроса в любом случае, так что вы не имеете особую необходимости для форматирования данных в качестве параметров http.

Как упоминалось в @charlietfl, он строит ваш внутренний объект и превращает его в строку, а не в отношении фактического формата объекта.

Вы можете либо разобрать JSON (как упомянуто charlie), либо попытаться удалить $ httpParamSerializer.

{ 
    ... 
    data: data, 
    ... 
} 
Смежные вопросы