当前位置:  开发笔记 > 编程语言 > 正文

闪亮:使用shinyjs获取cookie数据

如何解决《闪亮:使用shinyjs获取cookie数据》经验,为你挑选了1个好方法。

我想使用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值.有人能帮助我理解我做错了什么吗?感谢任何帮助.谢谢.



1> DeanAttali..:

我是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)

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有