2013-09-28 85 views
0

下面的代碼工作,如果我使用jquery AJAX,但棱角分明$http不使用下面的代碼的任何數據發送到服務器:

myapp.factory('startCampFactory',function($http,$q,$rootScope){ 
    return { 
    startNewCampaign : function(){ 

     var e = $("input#email"); 
     var email = e.val(); 
     var campname = $("input#campaignname").val(); 
     var about = $("textarea#about").val(); 
     var tamt = $("input#targetamount").val(); 
     var edate = $("input#enddate").val(); 
     var invitees = $("input#invitees").val(); 
     var file_data = $("#file").prop("files")[0]; 
     var form_data = new FormData();  

     form_data.append("file",file_data); 
     form_data.append("email",email); 
     form_data.append("campaignname",campname); 
     form_data.append("about",about); 
     form_data.append("targetamount",tamt); 
     form_data.append("enddate",edate); 
     form_data.append("invitees",invitees); 

     console.log(email+about+campname); 

     var deferred = $q.defer(); 

     $http({ 
      method:'POST', 
      url:'/startcampaign', 
      data:form_data, 
      headers: 
      { 
       'Content-Type'​ :'application/x-www-form-urlencoded' 
      } 
     }).success(function(data,status,headers,config) { 
      $rootScope.$apply(function() { 
      deferred.resolve(); 
     }); 
    }).error(function(){ 
     $rootScope.$apply(function() 
      { 
      deferred.reject(); 
      }); 
    }); 
    return deferred.promise; 
    } 
}); 
+0

你如何調用此服務? $ http自動返回'Promise'你不需要那麼做... – bingjie2680

+0

@rohit如果你發現解決方案的帖子,讓別人知道它 – Satish

+0

我不明白爲什麼這篇文章已被downvoted:這是一個普遍問題可以在網絡中找到 – Fedeco

回答

0

的問題是由於內容類型發生,去除頭部分或添加

contentType:false or 'multipart/form-data' 

     $http({ 
     method:'POST', 
     url:'url' 
     data:formData, 
     contentType:false, 
     processData: false 
    }). 
    then(function(result) { 
     alert(result); 
    }); 
+0

不,這段代碼沒有工作。 Content-Type應該在angularjs中的頭文件中('headers:{'Content-Type':'...'}')。另外我不確定processData。 –

2

嘗試是這樣的:

.service('fileUpload', ['$http', function ($http) { 
    this.uploadFileToUrl = function(file, uploadUrl){ 
    var fd = new FormData(); 
    fd.append('file', file); 
    $http.post(uploadUrl, fd, { 
     transformRequest: angular.identity, 
     headers: {'Content-Type': undefined} 
    }) 
    .success(function(){ 
    }) 
    .error(function(){ 
    }); 
    } 
}]); 

參考此鏈接的解釋:

http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs

+1

請不要發佈僅限鏈接的答案,因爲鏈接可能有一天不可用。相反,你可以消化內容並用你自己的話回答,然後引用鏈接作爲參考。 – Tay2510

+0

@ Tay2510:進行了更改。感謝您的反饋意見。 :) –

相關問題