我想使用shinyjs从我的Shiny应用程序中获取cookie数据.我创建了一个cookie,"samplecookie = testval"; 我希望能够检索samplecookie的值.我使用下面的javascript函数(我传递cookieName并返回相应的值).
function fetchCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(";"); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==" ") c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return "No such cookie";
以下是闪亮应用中的javascript代码
jsCode<-'shinyjs.tstfunc= function (name) { var nameEQ = name + "="; var ca = document.cookie.split(";"); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==" ") c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); return "No such cookie"; } }' ui <- shinyUI(fluidPage(mainPanel( useShinyjs(), extendShinyjs(text = jsCode) ))) server <- function(input, output) { observe({ x=js$tstfunc("samplecookie") print(x) }) } shinyApp(ui=ui, server=server)
我期待当我将"samplecookie"作为参数传递给tstfunc()函数时,它应该在控制台上打印"testval".但每次我不断返回NULL值.有人能帮助我理解我做错了什么吗?感谢任何帮助.谢谢.
我是shinyjs的作者.您不能像这样使用它来将值从JS传递给R.将值从JS传递给R的唯一方法是使用输入.在JavaScript中,您必须调用该Shiny.onInputChange()
函数,在R中,您需要添加一个listen/reactive语句来侦听正在更改的输入.
阅读此页面以了解将值从JS传递给R
您提供的代码有点奇怪且难以阅读,所以这里有一个如何执行此操作的简单示例.这段代码只是要求JavaScript将当前时间传递给R,这很简单,但它显示了如何执行此操作
library(shiny) library(shinyjs) jsCode <- 'shinyjs.gettime = function(params) { var time = Date(); Shiny.onInputChange("jstime", time); }' ui <- fluidPage( useShinyjs(), extendShinyjs(text = jsCode, functions = "gettime") ) server <- function(input, output) { js$gettime() observe({ cat(input$jstime) }) } shinyApp(ui = ui, server = server)