2014-09-08 2 views
2

Я кодирую плагин типа блока для Moodle и имею этот JS-код, который дает мне проблемы. Поскольку я не очень хорошо знаком с JS и JSON, я не могу определить, в чем проблема. Мой код использует эту функцию для добавления пользовательских действий на ссылку действий, который выдает Ajax вызов PHP файл ...Ошибка JavaScript parametar

Это код:

function block_helpdesk_sendemail(e) { 

e.preventDefault(); 

Y.log('Enetered method'); 

var sess = {'sesskey=':M.cfg.sesskey}; 
Y.log(sess); 

var ioconfig = { 
    method: 'GET', 
    data: {'sesskey=':M.cfg.sesskey}, 
    on: { 
     success: function (o, response) { 
      //OK 
      var data; 
      try { 
      data = Y.JSON.parse(response.responseText); 

      Y.log("RAW JSON DATA: " + data); 

      } catch (e) { 
      alert("JSON Parse failed!"); 
      Y.log("JSON Parse failed!"); 
      return; 
      } 
      if (data.result) { 
      alert('Result is OK!'); 
      Y.log('Success'); 
      } 
     }, 
     failure: function (o, response) { 
      alert('Not OK!'); 
      Y.log('Failure'); 
     } 
    } 
}; 

Y.io(M.cfg.wwwroot + '/blocks/helpdesk/sendmail.php', ioconfig); 
} 

код останавливается в отладчике на обратной линии:

Y.namespace('JSON').parse = function (obj, reviver, space) { 
    return _JSON.parse((typeof obj === 'string' ? obj : obj + ''), reviver, space); 
}; 

Я поместил M.cfg.sesskey и переменные данных на часы. Я могу видеть данные sesskey показаны, но переменные данные показывает, как это:

data: Object 
    debuginfo: "Error code: missingparam" 
    error: "A required parameter (sesskey) was missing" 
    reproductionlink: "http://localhost:8888/moodle/" 
    stacktrace: "* line 463 of /lib/setuplib.php: moodle_exception thrown 
       * line 545 of /lib/moodlelib.php: call to print_error() 
       * line 70 of /lib/sessionlib.php: call to required_param() 
       * line 7 of /blocks/helpdesk/sendmail.php: call to confirm_sesskey()" 

И это то, что показывают мои журналы:

Enetered method 
Object {sesskey=: "J5iSJS7G99"} 
RAW JSON DATA: [object Object] 

ответ

1

ваши объявляя sesskey в причудливом образе.

попытка заменить data: {'sesskey=':M.cfg.sesskey},

data: {sesskey: M.cfg.sesskey}, с

это может быть вам стоит читать через эту mdn link for javascript objects.

Обычно вам необходимо отправить JSON.stringify() объекты, отправленные через ajax. , которые могут быть частью проблемы.

+0

Спасибо вам обоим @codefan. Я пробовал оба решения (в кавычках и без кавычек), и теперь я получаю ошибку анализа JSON с ошибкой. Я прочитаю ссылку, которую предоставил Collet89 и, надеюсь, решает проблему – Moirae

+0

@Moirae рад, что у вас есть немного дальше. Обычно вам нужно 'JSON.stringify()' объекты, отправленные через ajax. которые могут быть частью проблемы. – Collett89

+0

Не могли бы вы добавить это к своему предыдущему ответу, чтобы я мог отметить его как ответ? – Moirae

2

Как сказал @ Collett89, определение JSON неверно. Его совет может работать, но если вам нужны строгие данные в формате JSON, то код ключа как строку (с кавычками):

var sess = {'sesskey': M.cfg.sesskey}; 

или

var sess = {"sesskey": M.cfg.sesskey}; 

See definition in Wikipedia

Смежные вопросы