2013-04-29 13 views
20

से डेटा की पास सरणी मुझे अपने कोणीय अनुप्रयोग से ऑब्जेक्ट की एक सरणी को नैन्सी फ्रेमवर्क के साथ एक .Net वेब सेवा में पास करने की आवश्यकता है।

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

लेकिन सर्वर 500 आंतरिक सर्वर त्रुटि भेजें:

मैं इस कोशिश की।
मुझे नहीं पता कि यह क्यों काम नहीं करता है। मैं एक विशेषज्ञ वेब सेवा विशेषज्ञ नहीं हूं लेकिन मुझे लगता है कि यह एक क्रमिक समस्या है।

क्या कोई मेरी मदद कर सकता है?

+1

क्या डेटा स्वरूप अपने वेब सेवा की उम्मीद कर रहा है? –

+1

मेरी वेब सेवा JSON – axvo

+0

की अपेक्षा करती है यदि आप AngularJS विशिष्ट क्रमिकरण समस्या का सामना कर रहे हैं, तो httpParamSerializerJQLike आपको जो चाहिए वह है। Http://stackoverflow.com/questions/33852190/angularjs-get-ajax-call-with-array-parameters – VivekDev

उत्तर

32

this post के अनुसार, आप सही हैं, यह क्रमबद्धता के बारे में है। Angular doesn't automatic serialize the data for you, तो आप इसे भेजने से पहले डेटा पार्स करने के लिए की जरूरत है:

... 

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

आप jQuery का उपयोग नहीं करते हैं, तो आप अपने खुद के $.parse रोल करने की आवश्यकता होगी। snippet here है या आप adapt jQuery implementation कर सकते हैं।

+2

पर एक नज़र डालें, अपने उत्तर के लिए धन्यवाद, लेकिन $ .param काम नहीं करता है, एक त्रुटि कहती है कि यह परिभाषित नहीं है – axvo

+3

यह एक jQuery कॉल है। AngularJs बॉक्स से बाहर समाधान प्रदान नहीं करता है :(। [यहां इसके बारे में कुछ है] (https://github.com/angular/angular.js/issues/1743)। यदि आप jQuery का उपयोग नहीं करते हैं, [ यहां] (http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object) एन्कोडिंग प्राप्त करने के लिए एक स्निपेट है। मैं उत्तर अपडेट करूंगा। –

+0

यह एक साधारण वस्तु के लिए ठीक काम करता है , लेकिन वस्तुओं की एक सरणी के साथ, यह काम नहीं करता है। हालांकि, मुझे लगता है कि अब यह एक सर्वर-साइड समस्या है ... – axvo

15
angular.toJson(data) 

$.param(data) 
+2

यह एक टिप्पणी होनी चाहिए? – Rimian

9

fauverism के स्थान पर काम करना चाहिए सही है, तो आप angular.toJson (डेटा) का उपयोग कर सकते हैं। इसके बजाए नहीं, लेकिन $ .param हालांकि।

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

आप उपयोग कर सकते हैं $ httpParamSerializer या $ httpParamSerializerJQLike

$http(
    url: 'myURL', 
    method: "POST", 
    data: $httpParamSerializer(data), 
) 
संबंधित मुद्दे