反应ajax axios没有到达symfony控制器并返回模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反应ajax axios没有到达symfony控制器并返回模板相关的知识,希望对你有一定的参考价值。

我正在尝试通过我的react + symfony应用程序中的ajax发送一些数据。没有错误,但ajax正在获取html模板而不是symfony函数响应。这是代码:

Symfony 3.4控制器功能:

/**
 * @Route("/loginPage", name="loginPage")
 */
public function loginAction(Request $request)
{
    if($request->request->get('username')){
        //make something curious, get some unbelieveable data
        $arrData = ['output' => 'here the result which will appear in div'];
        return new JsonResponse($arrData);
    }

    return new Response('success');

}

反应组件:

    import React, { Component } from 'react';
import { Form, Text } from 'react-form';
import axios from 'axios';


class Login extends React.Component {
  constructor() {
    super();
    this.handleSubmit = this.handleSubmit.bind(this);
    this.handleNameChange = this.handleNameChange.bind(this);
    this.handlePasswordChange = this.handlePasswordChange.bind(this);
    this.state = {
      name: '',
      password: ''
    }
  }

  handleSubmit(event) {
    event.preventDefault();
    axios.post(setData, {
      username: this.state.name,
      password: this.state.password
    })
      .then(function (response) {
        console.log(response);
      })
      .catch(function (error) {
        console.log(error);
      });

  }
  handleNameChange(e) {
  this.setState({name: e});
  }
  handlePasswordChange(e) {
    this.setState({password: e});
  }
  render() {
    return (
      <div className="card">
        <div className="card-block">
          <h4 className="card-title">Zaloguj się</h4>
          <div className="card-text">
            <Form>
              { formApi => (
                <form onSubmit={this.handleSubmit} id="form1">
                  <Text className="form-control" field="name" id="name" placeholder="Login" value={this.state.name} onChange={this.handleNameChange} required />
                  <Text className="form-control" field="password" type="password" id="password" placeholder="Hasło" value={this.state.password} onChange={this.handlePasswordChange} required />
                  <button className="btn btn-secondary" type="submit">Zaloguj się</button>
                </form>
              )}
            </Form>
          </div>
        </div>
      </div>
    );
  }
}
export default Login

这里是我得到的响应数据,这是我的twig模板的代码:Response

请帮忙 :)

答案

解决方案是在symfony中添加route.yml文件的路由,例如:

loginPage:
path:  /homePage
defaults: {
    _controller: AppBundle:Default:index,
    }
requirements:
    _method:  POST

以上是关于反应ajax axios没有到达symfony控制器并返回模板的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 调用 Symfony 控制器

symfony2 上的 AJAX 跨域

Symfony2 - KnpPaginator - AJAX/嵌入式控制器

.net core 3.1将ajax对象列表发布到MVC控制器没有数据到达

在symfony项目中使用ajax来删除项目

Symfony CSRF 和 Ajax