AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)'

Posted

技术标签:

【中文标题】AngularJs - 服务器抛出异常\'\'XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)\'【英文标题】:AngularJs - Server throwing exception''XMLHttpRequest cannot load the "URL" Response for preflight is invalid (redirect)'AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)' 【发布时间】:2018-02-14 21:03:41 【问题描述】:

服务器将对象返回为“undefined”和“XMLHttpRequest cannot load the "URL" Response for preflight is invalid (redirect)的原因是什么。。 p>

应用程序流程 - 它只是一个普通的邮政服务,向服务器发送文档详细信息作为回报应该返回一个包含各种参数的对象,但它返回'undefined'

发布文件的服务

fileUpload: 
    method: 'POST',
    url: config.apiPath + 'employee/service/pushRecords', //this is the URL that should return an object with different set of parameters (currently its returning Error error [undefined])
    isArray: false,
    params: ,
    headers: 
        'content-type': undefined
    
,

创建表单数据 w.r.t 文档后我使用的以上服务

function registerFormdata(files, fieldName) 
    files = files || [];
    fieldName = fieldName || 'FileSent';
    var returnData = new FormData();

    _.each(files, function (file, ind) 
        returnData.append(fieldName,file);
    );

    return returnData;

现在这是使用这些服务的控制器

function sendFilesToServer() 
        var formData = employeePushService.registerFormdata(directive.dropZoneFile.fileToUpload);
        return docUploadService.fileUpload(formData)
            .then(function(document)               
         // Extra actions but here the server should be returning an object with set of parameters but in browser console its Error [undefined]
            ).catch(logger.error);
    

【问题讨论】:

【参考方案1】:

假设你帖子中的 URL 目标是正确的,你似乎有一个 CORS 问题,让我解释一些事情。 不知道是不是自己开发的服务端API,如果是,需要添加CORS访问,你的服务端必须返回这个header:

访问控制允许来源:http://foo.example

您可以将http://foo.example替换为*,表示所有请求源都可以访问。

首先你要知道,当你在客户端发出AJAX CORS请求时,你的浏览器首先向服务器发出请求,检查服务器是否允许该请求,这个请求是一个OPTION方法,你可以看到这个例如,如果您在 chrome 中启用开发工具,则在网络选项卡中您可以看到该请求。 因此,在该 OPTIONS 请求中,服务器必须在响应标头中设置 Access-Control-Allow-Origin 标头。

因此,您必须检查此步骤,您的问题是服务器端不允许您的请求。

顺便说一句,CORS 请求并非支持所有内容类型,here 您有更多信息肯定会有所帮助。

另一个link 有助于解决由于重定向而发生 302 的问题。在这种情况下,POST 响应还必须包含 Access-Control-Allow-Origin 标头。

【讨论】:

以上是关于AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)'的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs中的promise

Promise.catch() 不会在 AngularJS 单元测试中捕获异常

angular2 http.post 方法抛出 typeerror 异常

AngularJS指令之 require 参数 的用法

AngularJS成功401拦截还是抛出401

为啥我在 AngularJS 中的日期输入字段会抛出类型错误?