SelectizeInput 不显示 shiny.io 上的所有选项

SelectizeInput does not display all choices on shiny.io

我有一个闪亮的应用程序,它有一个 selectizeInput 小部件,它以反应数据的形式从远程数据库中获取大约 26000 个选择。 使用远程数据库和反应性是为了避免加载选项时出现滞后和缓慢。 问题是,当在本地桌面上启动时,它工作正常,但当上传到 shinyapps.io 时,小部件不会向用户呈现所有可用的选择。 我把widgets的属性都玩过没用,比如设置SERVER =TRUE等等。 我已经将我正在使用的代码以及 link 放在我想要加载到 selectizeInput 的数据中作为选择。

UI部分

 library(shiny)
 library(DBI)
 library(RMySQL)
 library(shinydashboard)
 library(shinyjs)

 ui <- dashboardPage(  
     skin="yellow",  
   dashboardHeader(   ), 

  #sidebar content
   dashboardSidebar(
      sidebarMenu(  

          selectInput(
            inputId="selectData",
             label=" ", selected = NULL,
             choices=c( "title" )),      

       menuItem("Titles Search", tabName = "Titles", icon = icon("font"))

        )
       ),

     dashboardBody(

         tags$head(
        tags$style(HTML("
                  .content-wrapper {
                  background-color: green !important;
                  }

                  .main-header {
                  background-color: red !important;
                  }

                  "))

        ),

   tabItems(      
      tabItem(tabName = "Titles",              
            fluidRow(
               column(width=3,                        
                    box(                         
                      title=" ",
                       solidHeader=TRUE,
                        collapsible=TRUE,
                     width=NULL,
                     selectizeInput('titles', label = "Search by title", 
                choices = NULL, options = list(
                       placeholder = 'Type the title', maxOptions = 1000, 
                maxItems = 100,multiple = F, searchConjunction = 'and')),
                     tags$style(type="text/css",
                                ".selectize- 
        input::after{visibility:hidden;};"
                     )

                   )
                )
                )
             )                  
         )   
        )
        )

服务器部分

    library(shiny)
    library(DBI)
    library(RMySQL)
    library(shinydashboard)
    library(shinyjs)


      shinyServer(function(input, output, session) { 

        con <- dbConnect(MySQL(), user='XXXX', 
                 port = 3306, password='XXXXX', 
                 dbname='XXXXXX', 
                 host='XXXXXXXX' )
           query <- function(...) dbGetQuery(con, ...)
          on.exit(dbDisconnect(con), add = TRUE)



selectedData <- reactiveValues()

observeEvent(input$selectData, {

  con <- dbConnect(MySQL(), user='XXXXXX', port = 3306, password='XXXX', dbname='XXXXX', host='XXXXXXX' )
  query <- function(...) dbGetQuery(con, ...)
  on.exit(dbDisconnect(con), add = TRUE)

  if (input$selectData == "title") {
    selectedData$titledata <- query("SELECT titles FROM titles ;")
  }

  updateSelectizeInput(session, "titles",
                       choices =  as.character(unique(selectedData$titledata$titles)),
                       server = TRUE)
})

  session$onSessionEnded(function() { dbDisconnect(con) })

 })

我做错了什么?是 shinyapps.io 问题还是编码问题?

您似乎遇到了 selectize 将加载的项目数的限制。您似乎加载了大约 1000 件商品。

如果您查看 selectize 文档 here,有一个选项 maxOptions 默认为 1000。您甚至可以在 UI 中将此值设置为 1000。您的默认数据集包含 25k+ 个选项。

  • 尝试将此数字提高到 30k。
  • 也尝试将此选项添加到您的服务器中的 updateSelectizeInput