当前位置: 首页 > 知识库问答 >
问题:

Axios POST返回网络错误,即使状态为200并且有响应[重复]

东方富
2023-03-14

我在Axios上使用Vue JS 2.5:

"vue": "^2.5.17",
"vue-axios": "^2.1.4",
"axios": "^0.18.0",

我想打一个像这样的电话:

const data = querystring.stringify({
                'email': email,
                'password': password,
                'crossDomain': true, //optional, added by me to test if it helps but it doesn't help
            });

var axiosConfig = {
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded',
                        // "Access-Control-Allow-Origin": "*",
                        'Accept': '*',
                    }
                };

axios.post(url, data, axiosConfig)
                .then((response) => {
                    console.log('response');
                    console.log(response);
                })
                .catch((error) => {
                    console.log('error');
                    console.log(error);
                });

我也尝试过不使用“axioconfig”参数。但每次它进入catch时,都会显示一条消息:Error:networkerror

在浏览器的网络选项卡中,我得到了200个状态和良好的响应(使用有效的json),它基本上可以工作,但Axios返回错误,没有响应。

控制台还输出以下警告:跨源请求被阻止:同一源策略不允许读取远程资源https://url/api/page. (原因:缺少CORS标题“访问控制允许原点”。

我试着从邮递员那里打同样的电话,效果很好。不同的是Axios用我的localhost:8080发送标题:“起源”和“引用者”,这不同于我调用的应用编程接口网址。

如何从axios拨打此电话而不出现此错误?谢谢

编辑

如果我使用的是PHP,它会工作:

$curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://myurl",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "------WebKitFormBoundaryTrZu0gW\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\nemail\r\n------WebKitFormBoundaryTrZu0gW\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\npassword\r\n------WebKitFormBoundaryTrZu0gW--",
            CURLOPT_HTTPHEADER => array(
                "Postman-Token: 62ad07e5",
                "cache-control: no-cache",
                "content-type: multipart/form-data; boundary=----WebKitFormBoundaryTrZu0gW",
                "email: email",
                "password: password"
            ),
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            echo "cURL Error #:" . $err;
        } else {
            echo $response;
        }

我只是复制粘贴了生成的邮递员呼叫,并从另一个页面尝试了它,效果很好。所以这不是CORS的问题,而是我的Javascript调用的问题。

共有1个答案

吴靖
2023-03-14

您需要在API上启用CORS,您使用的是哪种语言/框架?

这里有一些参考:

https://enable-cors.org/

 类似资料:
  • 我希望根据角色限制的使用:/。 因此,我试图使用实现(出于测试目的),但问题是: 所有endpoint返回status,并且对约束不响应为。 澄清一下:我想作为登录,并因为而得到错误: 我测试了配置的格式: 基于示例配置。 在调查过程中,我试着发表评论,例如: 我尝试在Postman中清除cookies,以用户身份登录,但仍然得到。 只有当我不在Postman中使用请求时,我才会获得: UPD#2

  • 我想知道当服务器端发生错误时返回是否正确(错误详细信息将包含在响应主体中)。 例子: 我们正在发送 这是不是正确的行为?我们是否应该将状态代码更改为200以外的值?

  • 下面是我正在使用的一段代码: 期望reponse conatins的状态行:“HTTP/1.1400坏请求”想知道这是可以实现的吗?如果是,那么我如何继续做同样的事情。

  • 问题内容: 这真让我感到困惑。我收到来自Ajax的错误回调。但是,如果我从错误消息中获取res.responseText(返回正确,顺便说一句)并使用它,则它做对了。就像我收到了成功的回调一样。 数据设置如下: 和ajax调用是这样的: 错误消息是:发生错误:。 问题答案: 如果您的responseText不是正确的JSON,则会引发解析错误。无论是 确保你的反应是一个有效的JSON 或 删除。

  • 角度http调用: 回答 不使用代码格式化,因为在没有它的情况下阅读是非常困难的。 错误HttpErrorResponse httpclient默认返回响应的json,这是我正在积极研究的问题。但我不知道如何解决这个问题。

  • 我最近参加了一个新项目。在这个项目中,所有正在使用的API总是返回状态代码200。即使响应应该是400或404,API也会返回状态代码200。 我问API为什么不返回其他响应代码,程序员告诉我他们不使用响应代码。他们把信息放在身体里。 例如,缺少一些必填字段,它们返回响应状态代码200,但正文返回如下 如果未经授权的用户试图访问,状态代码为200,身体像这样返回 我以前做的是非常不同的,我总是通过