我是 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
print("HTTP request failed")
else
key = data
end
end)
print(key)
end
当我尝试这段代码时,我会得到一个错误,因为可用的 API_KEY
是 nil
。
有人有什么想法吗?
最佳答案
可能是问题 1:您没有收集 http.get() 返回的正文,因此打印了一个空的局部变量。
也许问题 2:API_KEY
在您的代码中未使用,因此它不会对任何内容产生任何影响。然而,API_KEY = ""
(删除本地)使其成为全局性可能会对一些已经加载的库产生影响——在这种情况下,无论你从哪里得到 http.get。如果是这种情况,您可能需要查阅文档/从 API 获取 API key (通常用于防止任何人使用该 API)。
也许是问题 3:不过,我有一个担忧,它是 code < 0
在匿名函数中。通常 http 会返回一个 code > 0
(未签名):200
表示好的,404
表示未找到,403
表示禁止,以及 300
中的任何内容与重定向有关,这可能需要您做更多的工作。参见 this wiki http代码引用。也许通过函数返回的数据实际上是预期的数据。如果是这种情况(你会通过错误代码知道),那么我会删除 key = data
对于 print(data)
.
可能的解决方案一:
- local API_KEY = ""
+ API_KEY = ""
可能的解决方案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
调试方案一:
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
关于function - LUA - 从回调中获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875841/