如何使用AJAX将变量从JavaScript发送到PHP脚本

时间:2015-08-04 15:48:26

标签: javascript php ajax

对于我的项目,我需要执行以下操作:

  1. 用户在画布上按下鼠标(html页面)
  2. JavaScript函数保存已按下的点的坐标
  3. 将此信息发送到PHP脚本
  4. PHP脚本将此数据添加到MySQL数据库
  5. 其他坐标放入JSON并发送回客户端并显示在同一个画布上
  6. 现在,我已经研究了第3步的问题(这是我不知道该怎么做的事情)。有不同的方法,我选择了这两个:

    1. Using Ajax
    2. HtmlRequest (answer 3)
    3. 在我的情况下哪种选择最好?还有更好/正确的方法吗?

1 个答案:

答案 0 :(得分:1)

我不会说有必要采用“正确”的方式,但是你可以遵循一些好的想法。其中一个想法是使用HTTP REST verbs:使用POST进行“创建”操作,使用GET进行“读取”操作。鉴于此,您应该向服务器发出AJAX POST请求,并通过POST参数传递坐标。

// will use this to turn an object into a url encoded string
var serializeObject = function(obj) {
  var output = '';
  for(var attr in obj) {
    if(obj.hasOwnProperty(attr)) {
      output += attr + '=' + obj + '&';
    }
  }
  return output.slice(0, -1);
};
var url = 'http://www.example.com/save.php';
// you need to serialize your data into key value pairs like the following
var exampleCoords = {
  x: 10,
  y: 20,
  z: 30
};
// postData will be x=10&y=20&z=30
var postData = serializeObject(exampleCoords);

var request = new XMLHttpRequest();
request.open('POST', url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.setRequestHeader("Content-length", postData.length);
request.setRequestHeader("Connection", "close");

// this function gets called when the request changes
request.onreadystatechange = function() {
    // request was successful
    if(request.readyState == 4 && request.status == 200) {
        alert(request.responseText);
    }
}
request.send(postData);

使用jQuery可以简化你的代码(虽然它几乎完全在幕后做同样的事情):

var url = 'http://example.com/save.php';
var coords = {
   x: 10,
   y: 20,
   z: 30
};
$.post(url, coords).then(function(response) {
   console.log(response);
});

您可以使用$_POST['x']在PHP中访问这些变量,确保在使用MySQL之前清理此数据(htmlentities等)。

对于记录,AJAX和XMLHttpRequest是同一个不同的名称,AJAX只是指异步Javascript和XML(如XMLHttpRequest中所述),XMLHttpRequest是内置的在用于执行AJAX请求的对象中