Function LUA-从回调中获取变量
我是LUA编码的新手,有一个问题: 我尝试发出http.get请求,并希望将内容获取到一个变量。这是我的密码:Function LUA-从回调中获取变量,function,http,lua,callback,Function,Http,Lua,Callback,我是LUA编码的新手,有一个问题: 我尝试发出http.get请求,并希望将内容获取到一个变量。这是我的密码: local API_KEY = "" function getAPIKey() local key http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(), function(code, data) if(code < 0) then
local API_KEY = ""
function getAPIKey()
local key
http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
function(code, data)
if(code < 0) then
print("HTTP request failed")
else
key = data
end
end)
print(key)
end
local API_KEY=“”
函数getAPIKey()
本地密钥
http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(),
功能(代码、数据)
如果(代码<0),则
打印(“HTTP请求失败”)
其他的
键=数据
结束
(完)
打印(键)
结束
当我尝试这段代码时,我会得到一个错误,因为可用的API\u键是nil
有人有什么想法吗?可能是问题1:您没有收集http.get()返回的主体,因此打印了一个空的局部变量
可能问题2:API\u KEY
在代码中未使用,因此不会对任何内容产生任何影响。但是,将其设置为全局的API_KEY=“”
(删除本地)可能会对已加载的某些库产生影响-在本例中,无论您从中获得了什么http.get。如果是这种情况,您可能需要查阅文档/从API获取API密钥(通常用于防止任何人使用API)
也许问题3:不过我有一个顾虑,那就是匿名函数中的code<0
。通常http将返回一个code>0
(未签名):200
表示正常,404
表示未找到,403
表示禁止,300
中的任何内容都与重定向有关,这可能需要您做更多的工作。有关http代码参考,请参阅。也许通过函数返回的数据实际上是预期的数据。如果是这种情况(你会从错误代码中知道),那么我会删除key=data
的print(data)
可能的解决办法1:
- local API_KEY = ""
+ API_KEY = ""
function getAPIKey()
local key
http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
local key = http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
function(code, data)
if(code < 0) then
- print("HTTP request failed")
+ print("HTTP request failed!", "`" .. code .. "`")
+ print("data:", "`" .. data .. "`")
else
+ print(code, "`" .. data .. "`")
key = data
end
end)
print(key)
end
可能的解决办法2:
function getAPIKey()
- local key
- http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
+ local key = http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
function(code, data)
if(code < 0) then
print("HTTP request failed")
else
key = data
end
end)
print(key)
end
函数getAPIKey()
-本地密钥
-http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(),
+local key=http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(),
功能(代码、数据)
如果(代码<0),则
打印(“HTTP请求失败”)
其他的
键=数据
结束
(完)
打印(键)
结束
调试解决方案1:
- local API_KEY = ""
+ API_KEY = ""
function getAPIKey()
local key
http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
local key = http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
function(code, data)
if(code < 0) then
- print("HTTP request failed")
+ print("HTTP request failed!", "`" .. code .. "`")
+ print("data:", "`" .. data .. "`")
else
+ print(code, "`" .. data .. "`")
key = data
end
end)
print(key)
end
函数getAPIKey()
本地密钥
http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(),
local key=http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(),
功能(代码、数据)
如果(代码<0),则
-打印(“HTTP请求失败”)
+打印(“HTTP请求失败!”,“`code..`”)
+打印(“数据:”、“`.”数据..“`”)
其他的
+打印(代码,“`.”数据..“`”)
键=数据
结束
(完)
打印(键)
结束
您从未分配过API\u密钥。您想在哪里使用它?也许您想要
local KEY=http.get(…)
。我现在有一个完全相同的问题,因为http.get回调函数的调用要晚得多,所以我的密钥总是为零。所以问题可能是:如何获取回调函数的值。有人找到了解决方案吗?嘿,谢谢你的详细解释。我尝试了两种可能的解决方案,但我仍然没有找到即使我尝试在函数末尾进行输出,也会得到相同的错误。有人知道吗?http.get将始终返回nil,因此此解决方案无法工作。。