首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义Handsontable autosave - ajax

未定义Handsontable autosave - ajax
EN

Stack Overflow用户
提问于 2017-11-21 08:27:00
回答 1查看 479关注 0票数 2

我将Handsontable 正式文件中的代码复制到JSFiddle中。这是手提电话0.34.5。

我在chrome控制台中得到了一个错误:"ajax未定义“。

代码如下,使用handsontable.full.min.js和handsontable.full.min.css预加载

HTML:

代码语言:javascript
复制
<div class="ajax-container">
  <div class="controls">
    <button name="load" id="load" class="intext-btn">Load</button>
    <button name="save" id="save" class="intext-btn">Save</button>
    <label>
      <input type="checkbox" name="autosave" id="autosave" checked="checked" autocomplete="off">Autosave</label>
  </div>
  <pre id="example1console" class="console">Click "Load" to load data from server</pre>
  <div id="example1" class="hot handsontable"></div>
</div>

剧本:

代码语言:javascript
复制
var
  $$ = function(id) {
    return document.getElementById(id);
  },
  container = $$('example1'),
  exampleConsole = $$('example1console'),
  autosave = $$('autosave'),
  load = $$('load'),
  save = $$('save'),
  autosaveNotification,
  hot;

hot = new Handsontable(container, {
  startRows: 8,
  startCols: 6,
  rowHeaders: true,
  colHeaders: true,
  afterChange: function(change, source) {
    if (source === 'loadData') {
      return; //don't save this change
    }
    if (!autosave.checked) {
      return;
    }
    clearTimeout(autosaveNotification);
    ajax('scripts/json/save.json', 'GET', JSON.stringify({
      data: change
    }), function(data) {
      exampleConsole.innerText = 'Autosaved (' + change.length + ' ' + 'cell' + (change.length > 1 ? 's' : '') + ')';
      autosaveNotification = setTimeout(function() {
        exampleConsole.innerText = 'Changes will be autosaved';
      }, 1000);
    });
  }
});

Handsontable.dom.addEvent(load, 'click', function() {
  ajax('scripts/json/load.json', 'GET', '', function(res) {
    var data = JSON.parse(res.response);

    hot.loadData(data.data);
    exampleConsole.innerText = 'Data loaded';
  });
});

Handsontable.dom.addEvent(save, 'click', function() {
  // save all cell's data
  ajax('scripts/json/save.json', 'GET', JSON.stringify({
    data: hot.getData()
  }), function(res) {
    var response = JSON.parse(res.response);

    if (response.result === 'ok') {
      exampleConsole.innerText = 'Data saved';
    } else {
      exampleConsole.innerText = 'Save error';
    }
  });
});

Handsontable.dom.addEvent(autosave, 'click', function() {
  if (autosave.checked) {
    exampleConsole.innerText = 'Changes will be autosaved';
  } else {
    exampleConsole.innerText = 'Changes will not be autosaved';
  }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-21 11:45:25

他们使用的ajax函数的代码相当简单,只是XMLHttpRequest的包装器。

注意:我是通过devtools在他们的docs页面上执行ajax.toString()获得的。它不是引用外部函数,因此它将按原样工作。

代码语言:javascript
复制
function ajax(url, method, params, callback) {
  var obj;

  try {
    obj = new XMLHttpRequest();
  } catch (e) {
    try {
      obj = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        obj = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        alert("Your browser does not support Ajax.");
        return false;
      }
    }
  }
  obj.onreadystatechange = function () {
    if (obj.readyState == 4) {
      callback(obj);
    }
  };
  obj.open(method, url, true);
  obj.setRequestHeader("X-Requested-With", "XMLHttpRequest");
  obj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  obj.send(params);

  return obj;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47408413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档