使用带有参数对象的 Axios Post 没有返回数据

Posted

技术标签:

【中文标题】使用带有参数对象的 Axios Post 没有返回数据【英文标题】:No data returned using Axios Post with Parameter Object 【发布时间】:2018-02-25 19:22:17 【问题描述】:

我在使用 Axios 并在 Laravel 路由中发布带有参数对象的帖子时遇到问题。

如果我使用查询参数e.g. ?username=user,则发布请求有效。但如果我使用一个对象,它就会失败:


这里是 Axios 发布请求:

let params =

    'username': 'help',
    'password': 'me'
;
axios.post(
'https://cors.now.sh/https://jumprope.design/test-login', params, 
headers: 
    'accept': 'application/json',
    'accept-language': 'en_US',
    'content-type': 'application/x-www-form-urlencoded',
    '_token': 'UawpqT74cr9sr0Uut0lttZPE2YKDb1ckvXYpzNJW'

).then(function(response) 
    console.log(response);
)
.catch(function(error) 
    console.log(error);
);

当我删除参数 obj 并将 ?username=user 附加到 URL 路由时,它可以工作并且我从请求中返回数据。


这是 Laravel (5.1) 控制器:

protected function postTestRequest(Request $request)

    $data = $request::all();
    return response()->json($data);


在浏览器中点击这条路线或使用邮递员进行测试可以正常工作:https://cors.now.sh/https://jumprope.design/test-login

这里也是 codepen 的链接:CodePen

非常感谢您的帮助或指导。


另外,我已经尝试过https://github.com/mzabriskie/axios#using-applicationx-www-form-urlencoded-format 的建议,但仍然收到相同的结果。

【问题讨论】:

如果代码在您将变量作为GET 变量而不是POST 变量传递时有效,那么您应该查看服务器端代码。 你是如何将路由器连接到函数的? @Dekel 如果我从控制器返回一个 json 响应并使用 axios 到 GET 响应,那么一切正常。 @Roozbehhz 这里是 routes.php 中的路由的样子 Route::get('test-login', 'AdminController@postTestLogin'); Route::post('test-login', 'AdminController@postTestLogin'); 我也尝试使用不同的方法返回视图(例如 AdminController@getTestLogin,但没有运气 控制台中是否打印了任何内容? 【参考方案1】:

检查您的路由文件并查看您要定位的路由是否使用“POST”方法定义,因为您正在使用“POST”并检查 该路线的目标是“postTestRequest”方法。你的路线肯定有问题。还要检查是否有任何其他路线与它不冲突。

【讨论】:

routes.php 文件对于postTestRequest 函数肯定使用POST 方法。我还禁用了 CSFR 令牌检查,并在 VerifyCsrfToken.php 中间件文件中为此路由添加了一个例外。

以上是关于使用带有参数对象的 Axios Post 没有返回数据的主要内容,如果未能解决你的问题,请参考以下文章

Axios Post 200 响应后不返回数据

如何:通过带有打字稿的配置时模拟 axios

axios发送post请求为啥返回字符串不是对象

对象数组作为请求 POST axios 的参数

Axios Http 客户端 - 如何使用表单参数构造 Http Post url

axios post请求报错