2016-01-11 11 views
6

Ich möchte mithilfe von shinyjs Cookie-Daten von meiner Shiny-App abrufen. Ich habe einen Cookie erstellt, "samplecookie = testval"; und ich möchte den Wert von Samplecookie abrufen können. Ich benutze die folgende JavaScript-Funktion (wo ich den Cookie-Namen übergebe und es den entsprechenden Wert zurückgibt).Shiny: Verwenden Sie shinyjs, um Cookie-Daten abzurufen

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"; 

Unten ist die Javascript-Code in der glänzenden App

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) 

Ich erwarte, dass, wenn ich "samplecookie" als Parameter an die tstfunc() Funktion übergeben, sollte es auf "testval" drucken die Konsole. Aber jedes Mal bekomme ich einen NULL-Wert zurück. Kann mir jemand helfen zu verstehen, was ich falsch mache? Schätze jede Hilfe. Vielen Dank.

Antwort

10

Ich bin der Autor von shinyjs. Sie können es nicht so verwenden, um Werte von JS an R zu übergeben. Die einzige Möglichkeit, einen Wert von JS an R zu übergeben, besteht darin, Eingaben zu verwenden. In JavaScript müssten Sie die Funktion Shiny.onInputChange() aufrufen, und in R müssen Sie eine beobachtende/reaktive Anweisung hinzufügen, die darauf wartet, dass der Eingang geändert wird.

Read this page to learn about passing values from JS to R

Der Code, den Sie bieten ist ein bisschen komisch und hart, so ist hier ein einfaches Beispiel zu lesen, wie dies zu tun. Dieser Code fragt einfach JavaScript, um die aktuelle Zeit an R zu übergeben, es ist einfach, aber es zeigt, wie dies zu tun ist

+0

Got it. Das funktioniert. Danke @daattali – rookieJoe