Đó là vấn đề tôi nêu tại số https://github.com/kripken/lua.vm.js/issues/5 mà tôi muốn gửi tới stackoverflow. Tôi có thể nhận được câu trả lời nhanh hơn ở đây vì mức độ phơi sáng cao hơn. Chỉ để đảm bảo câu hỏi của tôi được hiểu rõ ràng, tôi sẽ giải quyết nó. Làm cách nào để tôi có thể tiếp cận dữ liệu gọi lại từ các ví dụ bên dưới?gọi lại ajax lua.vm.js nhưng dữ liệu không được trả lại
Vấn đề nộp:
(lua.vm.js là a) mảnh tuyệt vời của phần mềm với một tiềm năng rất lớn để thay thế JavaScript trong trình duyệt!
Một vài đoạn mã được thu thập từ danh sách gửi thư, wiki, sự cố, v.v. Mọi thứ hoạt động ra khỏi hộp mà không có tác động hiệu suất được cảm nhận. Tôi chỉ gặp vấn đề với các giá trị trả về gọi lại trên các cuộc gọi jquery ajax và WebSocket trả về tin nhắn.
Ví dụ (xem script_example.html dưới đây):
js.run('$.get("/glossary.json", function(data) { console.log(data); });') -- this works
jq.get("/glossary.json", function(data) print(data) end) -- the callback is firing, but data is not returned
Một cách giải quyết bằng cách sử dụng tải() chức năng:
jq('#result').hide().load("/glossary.json", function() print(jq('#result').html()) end) -- this works because after the callback is fired, we just collect the result from the result div
Sau đây đi vào script_example.html (xem lua.vm. js git repository):
<!-- begin script tag example -->
<script src="lua.vm.js"></script>
<script src="jquery-1.10.1.js"></script>
<!--
Simplest web server for serving static files
python -m SimpleHTTPServer 8080
-->
<script type="text/lua">
-- Print contents of `tbl`, with indentation.
-- `indent` sets the initial level of indentation.
function tprint (tbl, indent)
if not indent then indent = 0 end
for k, v in pairs(tbl) do
formatting = string.rep(" ", indent) .. k .. ": "
if type(v) == "table" then
print(formatting)
tprint(v, indent+1)
else
print(formatting .. tostring(v))
end
end
end
-- function test()
-- return 'ok'
-- end
-- for i=1,5 do
-- js.global.alert(test())
-- end
local jq = js.get("$")
-- jq('body').append("plop").click(function() js.global.alert("plop click") end)
-- local version = jq().jquery
-- js.global.alert(version)
-- jq('#result').load("/glossary.json")
jq('#result').hide().load("/glossary.json", function() print(jq('#result').html()) end)
-- jq.get("/glossary.json", function(data) print(data) end) -- callback is firing, but data is not returned
-- js.run('$.get("/glossary.json", function(data) { console.log(data); });')
-- local ws = js.new.WebSocket("ws://echo.websocket.org/?encoding=text")
-- ws.onopen = function()
-- print("connected!")
-- ws.send("Rock it with HTML5 WebSocket")
-- end
-- ws.onclose = function()
-- print("disconnected")
-- end
-- ws.onerror = function(error)
-- print(error)
-- end
-- ws.onmessage = function(e)
-- tprint(e) -- using tprint() because an empty table is returned instead of the message
-- ws.close()
-- end
</script>
<!-- end script tag example -->
<div id="result"></div>
Tệp glossary.json được tải trong ví dụ trên:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}