gpt4 book ai didi

javascript - R Shiny从异步调用javascript获取IP地址返回

转载 作者:行者123 更新时间:2023-11-30 19:12:40 25 4
gpt4 key购买 nike

我正在尝试在我的 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)

如有任何帮助,我们将不胜感激。

最佳答案



为此,您可以使用函数 Shiny.setInputValue(id,value)(参见 Communicating with Shiny via JavaScript)。此函数可以设置从 javasript 到 R 的输入变量。

library(shiny)

ui <- fluidPage(
tags$script('
var coords = $.getJSON("https://ipapi.co/json/", function(data) {
Shiny.setInputValue("ip", data.ip); //set value from data.ip in js to input$ip in R
});'
),
verbatimTextOutput("value")
)
server <- function(input, output) {
output$value <- renderText({ input$ip })
}
shinyApp(ui, server)

关于javascript - R Shiny从异步调用javascript获取IP地址返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317207/

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