Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript缺少参数_Javascript_Json_Session_Moodle - Fatal编程技术网

JavaScript缺少参数

JavaScript缺少参数,javascript,json,session,moodle,Javascript,Json,Session,Moodle,我正在为Moodle编写一个块类型插件,这个JS代码给我带来了一些问题。因为我不太熟悉JS和JSON,所以无法推断出问题所在。 我的代码使用此函数将自定义操作添加到操作链接,该链接向php文件发出ajax调用 代码如下: function block_helpdesk_sendemail(e) { e.preventDefault(); Y.log('Enetered method'); var sess = {'sesskey=':M.cfg.sesskey}; Y.log(sess);

我正在为Moodle编写一个块类型插件,这个JS代码给我带来了一些问题。因为我不太熟悉JS和JSON,所以无法推断出问题所在。 我的代码使用此函数将自定义操作添加到操作链接,该链接向php文件发出ajax调用

代码如下:

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]

你以一种奇怪的方式宣布你的sesskey

尝试替换
数据:{'sesskey=':M.cfg.sesskey},

使用
数据:{sesskey:M.cfg.sesskey},

这可能值得你通读

通常需要
JSON.stringify()
通过ajax发送的对象。
这可能是问题的一部分。

正如@collet89所说,JSON定义是错误的。他的提示可能有用,但如果您需要严格的JSON数据,请将密钥编码为字符串(带引号):


谢谢你们两位@codefan。我尝试了这两种解决方案(带引号和不带引号),现在我发现JSON解析失败错误。我将阅读Collet89提供的链接,希望能够解决这个问题problem@Moirae很高兴你有进一步的进展。通常需要
JSON.stringify()
通过ajax发送的对象。这可能是问题的一部分。你能把它添加到你以前的答案中,这样我就可以把它标记为答案吗?@Moirae done。很高兴能提供帮助(我已经有一段时间没有处理JavaScript AJAX请求了——很高兴我的知识还在那里!)
var sess = {'sesskey': M.cfg.sesskey};
var sess = {"sesskey": M.cfg.sesskey};