AngularJS 的$htttp没有像 jQuery 的 $ajax 那样将表单数据传递到 POST 请求中

AngularJS's $htttp not passing form data into the POST request like jQuery's $ajax

提问人:nordictelecom 提问时间:9/6/2021 更新时间:9/6/2021 访问量:67

问:

我在将jQuery的请求转换为Angularjs的请求(Angularjs v1.8.x)时遇到问题。$.ajax$http

有一个带有一个文本输入和一个图像/文件输入的表单,我正在通过表单的提交按钮发送请求。ng-click="uploadImage($e)"

我认为问题在于 Angularjs 没有将填写的表单数据与请求一起发送。 我的请求工作正常,但对于我的请求,浏览器的开发者控制台中没有 - 请参阅下面的屏幕截图。对我的请求的响应是 ,但返回的数据不正确,因为表单数据从未随请求一起发送。$.ajax$httpForm Data$http200

对于两者,我使用此函数准备表单数据$.ajax$http

    /**
     * @var form is an HTML element
     */
    function prepData(form) {
        var fdata = new FormData();
        for(var i = 0; i < form.length; i++) {
            var NN = form[i].nodeName.toUpperCase();

            var name = form[i].name;

            if(typeof name != "undefined" && name != "") {
                if(NN == "INPUT") {
                    var NT =  form[i].type.toUpperCase();
                    if(NT == "FILE") {
                        for(var j = 0; j < form[i].files.length; j++) {
                            fdata.append(name, form[i].files[j], form[i].files[j].name);
                        }
                    } else if(NT == "CHECKBOX" || NT == "RADIO") {
                        if(form[i].checked == true) {
                            fdata.append(name, form[i].value);
                        }
                    } else {
                        fdata.append(name, form[i].value);
                    }
                } else {
                    fdata.append(name, form[i].value);
                }
            }
        }
        return fdata;
    }

$.ajax 请求选项:

var ajaxOptions = {
    type : "POST",
    async : true,
    url : getFullUrl(),
    data : prepData(form),
    dataType : self.dataType,
    beforeSend: function (request) {
        request.setRequestHeader("translate", User.settings.lang);
        request.setRequestHeader("userid", User.logged);
    }
};

$http请求选项:

var httpOptions = {
    type : "POST",
    async : true,
    url : getFullUrl(),
    data : prepData(form),
    dataType : self.dataType,
    headers : {
        "translate": User.settings.lang,
        "userid": User.logged,
        "X-Requested-With": "XMLHttpRequest",
        "Content-Type": undefined,
        "transformRequest": []
    },
    eventHandlers: { 
        "readystatechange": function(event) {
            this.xhr = event.currentTarget;
        }
    }
};

当我比较和在浏览器的开发人员工具中时,我可以看到它们的响应标头是相同的,但请求标头在这些属性中有所不同(请参阅下面的屏幕截图):$.ajax$http

  • Accept
  • Content-Type

屏幕截图 1 - $.ajax() (jQuery):enter image description here

屏幕截图 2 - $http() (AngularJS v1.8.x):enter image description here

javascript jquery angularjs ajax

评论


答:

0赞 DVN-Anakin 9/6/2021 #1

相当于 $.ajax 的是 $http 的。type: ...method: ...

通常,请求应如下所示:$http

var httpOptions = {
    method : "POST",
    // ...
};

$http(httpOptions).then(function(res) { 
    // ... 
}, function(res) {
    // ...
});