【发布时间】:2020-02-07 13:29:24
【问题描述】:
我正在尝试在我的 R Shiny 应用程序上使用 javascript 获取客户端 IP 地址。 alert 打印正确的结果,函数在 javascript 中独立工作,但在 R 中返回 NULL。
我怀疑问题是异步调用不等待立即返回,因为alert 提供了正确的结果。我尝试修改我的 javascript 以使其同步,但仍然得到相同的结果。
另一种在 R 中获取 IP 地址的方法可能会被接受。
文件app.R:
library(shiny)
library(shinyjs)
ui <- function(req) {
fluidPage(
useShinyjs(),
extendShinyjs(text = "
shinyjs.getIP = function(){
$.getJSON('https://ipapi.co/json/').then(function(data){
alert(JSON.stringify(data.ip, null, 2));
return JSON.stringify(data.ip, null, 2);
});
}
shinyjs.getIP2 = function(){
var jqxhr = $.getJSON('https://ipapi.co/json/');
jqxhr.done(function(data) {
alert(JSON.stringify(data.ip, null, 2));
return JSON.stringify(data.ip, null, 2);
});
}
")
)
}
server <- function(input, output, session) {
ip <- reactive(js$getIP())
observe({
print(ip())
})
ip2 <- reactive(js$getIP2())
observe({
print(ip2())
})
}
shinyApp(ui, server)
任何帮助将不胜感激。
【问题讨论】:
标签: javascript jquery r asynchronous shiny