2017-04-04 51 views
1

我有一個服務器在Symfony中,我通過AngularJS客戶端使用函數。該函數請求數據數組作爲參數。 這種類型的:數組格式作爲參數angularjs

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

當我測試了服務器與郵差獲得的代碼:

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 
    }); 
}; 

所以我想知道如何正確地轉換我以服務器請求的格式發送的內容。

這在請求中返回這個有效載荷: 內容處置:表格數據; name =「nom」

但是我要找的格式是: Content-Disposition:form-data; 名=「形式[NOM]」 我在ideas..si有人當然會幫我請^^

+0

爲什麼這個問題標記爲'angularjs'?這裏沒有Angular代碼。 – georgeawg

+0

你在服務器上的數據是什麼?你用什麼來獲取這些數據?你能用這個信息更新你的問題嗎 – Chausser

+0

這個問題已經被編輯了,我希望我能夠給出更多的信息 – AlexisCraig

回答

2

爲了得到你正在尋找你應該這樣做的結果:

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

我希望它會幫助你

+0

非常感謝:D it works – AlexisCraig