【问题标题】:Shiny: use shinyjs to fetch cookie dataShiny:使用 shinyjs 获取 cookie 数据
【发布时间】:2016-04-15 12:33:22
【问题描述】:

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

【问题讨论】:

    标签: r shiny shinyjs


    【解决方案1】:

    我是 shinyjs 的作者。您不能像那样使用它来将值从 JS 传递到 R。将值从 JS 传递到 R 的唯一方法是使用输入。在 JavaScript 中,您必须调用 Shiny.onInputChange() 函数,而在 R 中,您需要添加一个观察/反应语句来监听正在更改的输入。

    Read this page to learn about passing values from JS to 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)
    

    【讨论】:

    • @daattali 是否计划扩展shinyjs 以支持以随意方式返回参数?确实,这将非常方便。
    • @AdamB 你的意思是说你可以从javascript中return并且闪亮会收到那个值吗?如果这就是你的意思,那么这是不可能的,我看不出它怎么可能(我可能错了,但我不认为可以支持这种交互)
    猜你喜欢
    • 2021-01-27
    • 2019-08-18
    • 2018-07-23
    • 1970-01-01
    • 2016-06-25
    • 2019-01-01
    • 2014-01-02
    • 2013-12-30
    • 2018-04-09
    相关资源
    最近更新 更多