R从异步调用javascript获取IP地址返回
我正在尝试在我的R Shining应用程序上使用javascript获取客户端IP地址R从异步调用javascript获取IP地址返回,javascript,jquery,r,asynchronous,shiny,Javascript,Jquery,R,Asynchronous,Shiny,我正在尝试在我的R Shining应用程序上使用javascript获取客户端IP地址alert打印正确的结果,函数在javascript中独立工作,但在R中返回为NULL 我怀疑问题在于异步调用没有等待立即返回,因为alert提供了正确的结果。我试图修改javascript以使其同步,但仍然得到相同的结果 在R中获取IP地址的另一种方法也可以接受 文件app.R: library(shiny) library(shinyjs) ui <- function(req) { fluid
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)
库(闪亮)
图书馆(shinyjs)
用户界面
为此,可以使用函数shinny.setInputValue(id,value)(请参阅)。
此函数允许将输入变量从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)
库(闪亮)
非常感谢。正是我需要的!