Javascript 'this' 和异步 post 方法

标签 javascript post asynchronous

我对 javascript 有点陌生,并且在实现以下内容时遇到了困难(已经有 2 天了):

假设我有一个 Object()“引擎”,我希望它根据帖子的内容做出不同的响应。 IE。用户执行一个操作,引擎解释该操作,向服务器发送请求,服务器响应,“引擎”相应地采取行动。

作为所需行为的最小示例,我提出了一个“引擎”,假设它正在接收鼠标单击的位置(receiveClickEvent),通过“post”(requestByAsyncPost)发送它,并根据其内容进行响应(respondToRequest):

一个用于发帖的小函数

function requestByAsyncPost(content, funct)
{
/* some initialization missing here to not confuse the reader */
xmlhttp.onreadystatechange = function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            funct(xmlhttp.response);
        }
    }
xmlhttp.open("POST","foobar.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(content);
}

var engine = new Object()
engine.respondToRequest = function(content) {/*implementation*/ }

我想在鼠标单击发生时激活的一小段代码(现在不重要如何触发)

engine.receiveClickEvent = function(position)
{
    var funct = function(content)
    {
         this.respondToRequest(content); //<<<---- I want to refer engine's 'this'
    }
    requestByAsyncPost('request=click&position=['+position[0]+','+position[1]+')', funct);
}

这没有按我想要的方式工作,因为“this”位于函数 funct 内部。我怎样才能实现这种行为?

最佳答案

你必须通过这种或其他方式记住外部this。喜欢:

engine.receiveClickEvent = function(position)
{
    var self = this;
    var funct = function(content)
    {
         self.respondToRequest(content); //<<<---- 'self' refers engine's 'this'
    }; // <<<--- btw, missed semicolon
    requestByAsyncPost('request=click&position=['+position[0]+','+position[1]+')', funct);
}; // <<<--- btw, here, too :-)

关于Javascript 'this' 和异步 post 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219661/

相关文章:

javascript - 检查选项卡是否存在并使其处于事件状态;否则创建它

javascript - 获取缓存文件 chrome 扩展

javascript - AngularJs - 使用父作用域变量和隔离作用域的指令

javascript - Jasmine - 在执行测试之前等待异步库完全加载

javascript - Angular 数据表固定列未定义不是函数

php - 更新 mySQL 数据库但 POST 未返回值

ios - 从通过 WebSocket 发送的 JSON 数据在 Swift 中发送 POST 请求

sockets - lua 套接字 POST

java - 线程池 "mapped"如何在 Spring 中执行?

javascript - node.js 异步 waterfall 调用以前的方法