Я пытаюсь получить IP-адрес клиента с помощью JavaScript в моем приложении R Shiny. alert
выводит правильный результат, функция работает в javascript
как отдельная функция, но возвращается NULL
в R.
Я подозреваю, что проблема в асинхронном вызове, который не ожидает немедленного возвратапотому что alert
дает правильный результат. Я попытался изменить мой javascript, чтобы он работал синхронно, но все равно получаю тот же результат.
Может быть принят другой способ получения IP-адреса в R.
Файл 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)
Любая помощь будет принята с благодарностью.