数据格式数组作为参数angularjs

时间:2017-04-04 18:56:06

标签: php angularjs ajax symfony form-data

我在Symfony中有一台服务器,我通过AngularJS客户端使用一个函数。此函数请求数据数组作为参数。 那种类型:

[nom => test, provenance => test, numero => 12 ]

测试服务器时使用Postman获取的代码:

var form = new FormData();
form.append("form[nom]", "test");
form.append("form[provenance]", "test");
form.append("form[numero]", "12"); 
var settings = {  
  "async": true,
    "crossDomain": true,
    "url": "http://localhost:8000/api/produits",
    "method": "POST",
    "headers": {    
    "authorization": "ey.....YMpJJA",
        "accept": "application/json",
        "cache-control": "no-cache",
        "postman-token": "0dd5a3...ad03a6d3"  
  },
    "processData": false,
    "contentType": false,
    "mimeType": "multipart/form-data",
    "data": form
} 
$.ajax(settings).done(function(response) {  
  console.log(response);
});

我现在尝试重现相同的结果,但在我的AngularJS应用程序一侧,并通过HTML中的表单发送我的数据,但问题是我无法检索我在表单中输入的数据。

服务器端:

/**
 * @Route ("/api/produits", name="api_produit_add")
 * @Method("POST")
 * @param Request $request
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function addAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    $produit = $this->getProduit();

    $form = $this->createFormBuilder($benevole, array('csrf_protection' => false))
        ->add('nom', TextType::class, array('required' => true))
        ->add('provenance', TextType::class, array('required' => true))
        ->add('numero', TextType::class, array('required' => true))
        ->getForm();

    if ($request->isMethod('POST')) {
        $form->submit($request->request->get($form->getName()));

        if ($form->isValid() && sizeof($request->request->get('ingroupe'))) {
            $produit->setPass(sha1($form->getData()->getPass()));
            $em = $this->getDoctrine()->getManager()->flush();
            return new JsonResponse('ok');
        } else {
            $errors = [];
            foreach ($form->getErrors(true, true) as $error) {
                $errors[] = $error->getOrigin()->getName() . ' : ' . $error->getMessage();
            }
            $response = new JsonResponse($errors);
            $response->setStatusCode(Response::HTTP_NOT_ACCEPTABLE);
            return $response;
        }
    }

    $response = new JsonResponse('only POST method');
    $response->setStatusCode(Response::HTTP_BAD_REQUEST);
    return $response;

}

目前,这是我在申请方面可以做的事情:

var add = function(form){
var token = window.localStorage.getItem('token');
var formdata = new FormData();
for (var key in form) {
    console.log(key, form[key]);
    formdata.append(key, form[key]);
}
    $ionicLoading.show();
    return $http({
            method  : 'POST',
            url     : API_ENDPOINT.url + '/produits',
            data    : formdata,
            transformRequest: angular.indentity,
            headers : {Authorization : 'Bearer ' + token,'Content-Type': undefined, 'Accept': 'application/json' },
       }).then(function(result) {
            console.dir(result.data);
    },function errorCallback(response) {
            console.log(response);
     });
};

并在控制器中:

$scope.add = function () {
    console.log($scope.form);
    LoginService.edit($scope.form).then(function(response){
        //success callback
        console.log(response);
        //do something with the data
    },function(response){
        //error callback
    });
}; 

所以我想知道如何按照服务器请求的格式准确转换我发送的内容。

在请求有效负载中返回给我: 内容处理:表格数据;名称= “NOM”

但我正在寻找的格式是: 内容处理:表格数据; name =“form [nom]” 我正在思考。有人可以帮助我^^

1 个答案:

答案 0 :(得分:2)

要获得您正在寻找的结果,您应该这样做:

var formdata = new FormData();
for (var key in form) {
    console.log(key, form[key]);
    formdata.append('form['+key+']', form[key]);
}

我希望它能帮到你