Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript es6中的函数调用函数_Javascript_Reactjs_Es6 Class - Fatal编程技术网

从javascript es6中的函数调用函数

从javascript es6中的函数调用函数,javascript,reactjs,es6-class,Javascript,Reactjs,Es6 Class,我将es6 javascript与babel一起使用,并尝试使用xhr使用两个函数进行ajax调用,但得到一个错误uncaughtTypeError:this.post不是一个函数 从es6 javascript中同一类中定义的另一个函数调用函数的正确语法是什么 谢谢你的回答这是我的密码 import alt from '../../alt'; import cookie from 'react-cookie'; class LoginActions { constructor(){

我将es6 javascript与babel一起使用,并尝试使用xhr使用两个函数进行ajax调用,但得到一个错误
uncaughtTypeError:this.post不是一个函数

从es6 javascript中同一类中定义的另一个函数调用函数的正确语法是什么

谢谢你的回答这是我的密码

import alt from '../../alt';
import cookie from 'react-cookie';

class LoginActions {
  constructor(){
    this.generateActions(
      'updatePassword',
      'updateName',
      'loginSuccess',
      'loginFail',
      'remember'
    );
  }   
    // Generic get request
    post(url, data, callback) {
        var xhr = new XMLHttpRequest();
        xhr.open('POST', url, true);
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4) {
                if (xhr.status == 200) {
                    callback(null, xhr.responseText);
                } else {
                    callback(xhr.statusText);
                }
            }
        };
        xhr.send(data);
    }

    // Get actual content
    login(name, password, remember) {
      var data = "name="+name+"&password="+password+"&remember="+remember;
        this.post('api/login', data, function(err, data) {
            if (!err) {
              this.actions.loginSuccess(data.message);
            } else {
                this.actions.loginFail(JSON.parse(data.message));
            }
        }).bind(this);
    }




}

export default alt.createActions(LoginActions);
Edit1:这就是我调用登录函数的方式/也将数据传递给上面的xhr请求

handleSubmit(event){
    event.preventDefault();

    var name = this.state.name;
    var password = this.state.password;
    var remember = this.state.remember;

    LoginActions.login(name, password, remember);

  }
您的方法
login()
post()
是实例方法,而不是静态方法。因此,您必须使用
new
创建
LoginActions
对象的实例,以便在该对象上正确调用这些方法

或者,如果您实际上不需要包含实例数据的实例,则将所有方法都设置为静态,并将它们称为
LoginActions.post()
LoginActions.login()
,而不使用
this


相反,你在尝试混搭。您正在调用
LoginActions.login()
这是一个静态类型调用,然后在
login()
的内部,您正在尝试引用
这个假定了一个实例的

试试这些东西:

  • 按照@jfriend00的建议,创建LoginAction类的实例并调用该类的login方法:
    var loginAction=new LoginActions()
    loginAction.login(姓名、密码、记住)

  • 在LoginActions类中定义GenerationActions方法
  • this.post('api/login',数据,函数(err,data){
    如果(!err){
    this.actions.loginsAccess(data.message);
    }否则{
    this.actions.loginFail(JSON.parse(data.message));
    }
    }).约束(本)
    在这里,您似乎试图将
    绑定到回调。但实际上,您正在将
    这个
    绑定到post方法的返回值。要将此
    绑定到回调,
    this.post('api/login',数据,函数(err,data){
    如果(!err){
    this.actions.loginsAccess(data.message);
    }否则{
    this.actions.loginFail(JSON.parse(data.message));
    }
    }.约束(这个)
    请注意函数(){}.bind而不是post(函数(){}.bind)


  • 你能告诉我你调用
    login
    函数的方式吗?嗨@jfriend00,昨天在阅读了你的答案后,我继续使用superagent进行ajax调用,我能够使用
    这个.actions.
    静态方法
    login()在ajax请求结束后。但是今天我重新安装了节点模块,我又遇到了同样的问题
    this.actions.*
    login()
    的静态方法中使用时给了我未定义的属性。。。发生什么事了?你能解释一下我能做些什么来解决这个问题吗?请阅读此文以进一步澄清@eersteam-您是否了解
    仅用于您使用
    新建
    创建的对象实例,而不用于静态方法?这是Javascript中面向对象开发的基本概念。您需要了解,如果要使用
    this
    ,则需要对象的实例。