как передать переменную js в качестве ключа в массив опций

#php #javascript #swfupload

#php #javascript #swfupload

Вопрос:

Я пытаюсь использовать переменную в качестве значения «ключа» в массиве параметров объекта javascript swfupload. Страница получения запроса ajax проверяет имя / идентификатор сеанса перед продолжением обработки, поэтому эти значения обязательны.

Однако, поскольку имя сеанса является переменным, я не могу просто установить его статически. Я пытаюсь что-то вроде этого:

 var myid        = ".$php_pageid.";
var sessionid   = '".$php_sessionid."'; 
var sessionname = '".$php_sessionname."';
var swfu = new SWFUpload({
    // Backend Settings
    upload_url: "index.php",
    post_params: 
    {
        "task" : "ajaxUpload",
        "id" : myid, 
        sessionname : sessionid 
    },
  

Однако, когда я console.dir использую объект swfu, он показывает

 sessionname: "234630019cc86c366e1fa390ac737648" 
  

вместо

 d9fb7fb097782697802a63e5f65b765e: "234630019cc86c366e1fa390ac737648"
  

как требуется.

Я знаю, что мог бы просто сделать

 var swfu = new SWFUpload({
    // Backend Settings
    upload_url: "index.php",
    post_params: 
    {
        "task" : "ajaxUpload",
        "id" : myid, 
        "'.$php_sessionname.'" : "'.$php_sessionid.'"
    },
  

Но я абстрагирую js в его собственный файл и устанавливаю все переменные в файле PHP.

Есть ли правильный способ установить переменную в качестве ключа пары опций?

Ответ №1:

Делайте это динамически, а не декларативно:

 var params = {
    "task" : "ajaxUpload",
    "id" : myid
};

params[sessionname] = sessionid;

var swfu = new SWFUpload({
    // Backend Settings
    upload_url: "index.php",
    post_params: params,
  

Комментарии:

1. Однако это может рассматриваться как угроза безопасности. Зачем предоставлять имя сеанса JavaScript? Почему бы не использовать постоянную строку?

2. Привет, Мэтт — не могли бы вы подробнее рассказать об «использовании постоянной строки»? Спасибо

3. Используйте постоянный ключ вместо имени сеанса, например. {...sessionname: sessionid...} Мне любопытно узнать, почему вы вообще это передаете. Похоже на довольно зияющую дыру в безопасности или, по крайней мере, запах кода.