【问题标题】:FormData append not working with $http postFormData 附加不适用于 $http 帖子
【发布时间】:2017-06-16 16:26:34
【问题描述】:

我想将信息提交到在线服务器,它要求我使用 FormData 发送。 所以我为此使用以下功能

var my_app = angular.module("my-app",[])
my_app.controller("MainController", function($scope, $http){
    $scope.master = {title: "Title",desc: "Desctibe", tags: ["One","Two"], category: ["1","2"] };
    var url = "http://freedoctor.southeastasia.cloudapp.azure.com/api/forum/create";
    var config = {"headers":{"Authorization":"JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU5MzEwNDUxZjk3MjJmZTQyODE1NTIxYSIsInJvbGUiOiJwYXRpZW50IiwiaWF0IjoxNDk3NDE4ODA3fQ.ODrSlYwxvrPb93IzHW3s-7NIVFsOL4pKzqZx8yMqWWE"}};

    $scope.booking = function(){
        $scope.title=$scope.user.title;
        $scope.desc=$scope.user.desc;
        $scope.tags=$scope.user.tags;
        $scope.category=$scope.user.category;
        $scope.askedTo=$scope.user.askedTo;
        var info = new FormData();
        info.append("title", $scope.title);
        info.append("desc", $scope.desc);
        info.append("tags", $scope.tags);
        info.append("category", $scope.category);


        $http.post("http://localhost:8080/"+url, info, config).then(
        function(response){
            console.log(response);
            $scope.reply = response.data;
            },
            function(response){
                console.log(response);
                $scope.reply = response.data;
            });
    }

    $scope.reset = function() {
        $scope.user = angular.copy($scope.master);
    };
    $scope.reset();
});

所以每当我调用预订功能时,我都会收到内部服务器错误

SyntaxError: Unexpected token -
at parse (/home/freedoctor/fdhbackend/node_modules/body-parser/lib/types/json.js:83:15)
at /home/freedoctor/fdhbackend/node_modules/body-parser/lib/read.js:116:18
at invokeCallback (/home/freedoctor/fdhbackend/node_modules/raw-body/index.js:262:16)
at done (/home/freedoctor/fdhbackend/node_modules/raw-body/index.js:251:7)
at IncomingMessage.onEnd (/home/freedoctor/fdhbackend/node_modules/raw-body/index.js:307:7)
at emitNone (events.js:86:13)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickDomainCallback (internal/process/next_tick.js:122:9)

我知道 FormData 正在工作,因为我用这个检查了它

for (var pair of info.entries()) {
  console.log(pair[0]+ ', ' + pair[1]); 
}

【问题讨论】:

    标签: angularjs multipartform-data


    【解决方案1】:

    您尝试通过 formData 对象传递的其他数据应附加到 FormData 对象的 data 属性。我曾经写过以下函数。应该也适合你:

    this.uploadFile = function (url, dataToUpload) {
                var data = new FormData();
                data.append("file", dataToUpload.file); //if you want to upload files along, else ignore this line
                data.append("data", angular.toJson(dataToUpload.data)); //you can pass an object containing additional data and then append it here to the data property
                return $http.post(url, data, {
                    transformRequest: angular.identity,
                    headers: { 'Content-Type': undefined }
                });
            }
    

    您可以将.then 回调链接到此函数返回的对象。

    如果您遇到任何问题,请尝试并更新。

    【讨论】:

    • 我回答了一个类似的问题stackoverflow.com/questions/44405200/…。也许你能以某种方式与之相关
    • 感谢您的回答,但我认为这不适用于我的情况。因为我只想在请求中发送字符串。我只是无法理解拨打电话后收到的错误
    • 我看到您正在尝试将自定义属性添加到 FormData obj。我怀疑这不受支持,因此您的请求无法序列化。
    猜你喜欢
    • 2015-12-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2016-02-05
    • 2014-12-27
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多