2013-04-29 8 views
20

veri dizisini geçirin Angular uygulamasından bir nesneyi Nancy çerçeveli bir .NET hizmetine geçirmem gerekiyor.

function TestCtrl($scope, $http){ 
    $scope.postTest = function(){ 

     var data = [obj1, obj2, obj3]; 

     $http({ 
      url: 'myURL', 
      method: "POST", 
      data: data, 
      headers: { 
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
      } 
     }).success(function(data){ 
      alert("done"); 
     }); 
    } 
} 

Ama sunucu 500 iç sunucu hatası gönderin:

Bu çalıştı.
Neden çalışmadığını bilmiyorum. Uzman bir web servis uzmanı değilim ama sanırım bir seri hale getirme problemi.

Birisi bana yardımcı olabilir mi?

+1

sizin webservice beklediği veri biçimi kullanabilir? –

+1

Web servisim JSON – axvo

+0

bekliyor AngularJS belirli bir serileştirme sorununa karşı karşıyaysanız, httpParamSerializerJQLike ihtiyacınız olan şeydir. Http://stackoverflow.com/questions/33852190/angularjs-get-ajax-call-with-array-parameters – VivekDev

cevap

32

this post'a göre haklısınız, bu seri hale getirme hakkında. Angular doesn't automatic serialize the data for you, bunu göndermeden önce verileri ayrıştırmak gerekir: jQuery kullanmak istemiyorsanız

... 

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

, sen $.parse kendi rulo gerekir. snippet here veya adapt jQuery implementation olabilir.

+2

adresine bir göz atın Cevabınız için teşekkür ederiz, ancak $ .param çalışmıyor, bir hata tanımlı değil diyor – axvo

+3

Bu bir jQuery çağrısıdır. AngularJs kutusundan bir çözüm sağlamaz :(. [İşte bu konuda bir şey var] (https://github.com/angular/angular.js/issues/1743). Eğer jQuery kullanmıyorsanız, [ burada (http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object) kodlamayı elde etmek için bir pasaj. Cevabı güncelleyeceğim –

+0

basit bir nesne için iyi çalışıyor Ancak, bir dizi nesneye sahip değil, ancak şimdi bir sunucu tarafı sorun olduğunu düşünüyorum ... – axvo

15
angular.toJson(data) 

$.param(data) 
+2

Bu bir yorum olmalı? – Rimian

9

fauverism yerine çalışmalıdır haklı, angular.toJson (veri) kullanabilirsiniz. Bunun yerine, ancak $ .param'dan önce.

function TestCtrl($scope, $http){ 
$scope.postTest = function(){ 

    var data = [obj1, obj2, obj3]; 
    var jsonData=angular.toJson(data); 
    var objectToSerialize={'object':jsonData}; 

    $http({ 
     url: 'myURL', 
     method: "POST", 
     data: $.param(objectToSerialize), 
     headers: { 
       'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
     } 
    }).success(function(data){ 
     alert("done"); 
    }); 
} 

}

2

Eğer $ httpParamSerializer veya $ httpParamSerializerJQLike

$http(
    url: 'myURL', 
    method: "POST", 
    data: $httpParamSerializer(data), 
)