gpt4 book ai didi

Javascript 'this' 和异步 post 方法

转载 作者:行者123 更新时间:2023-11-28 20:47:16 25 4
gpt4 key购买 nike

我对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com