Javascript与PHP动态通信

时间:2014-03-25 15:28:21

标签: javascript php html mysql

我正在创建一个系统,其中Javascript脚本从Sage提取中提取数据,并将其存储在Javascript对象中(我猜JSON)。然后我需要通过PHP将数据上传到SQL数据库。

我曾想过使用iframe,通过将src更改为PHP页面URL,然后通过url将GET变量传递给页面。我想知道我是否真的可以使用标签来做到这一点?通过创建新图像并将src设置为PHP页面URL(再次,将GET变量传递给它),那么PHP页面可以完成其余的工作吗?我知道图像不会显示任何内容,也不需要。我只需要一种方法将数据传递给PHP页面。

最佳做法?

2 个答案:

答案 0 :(得分:2)

使用 JavaScript 与服务器通信的现代方法是XMLHttpRequest。默认情况下,它是异步的,并且确实为您提供了更改此选项的选项,但同步请求可能被视为不良做法。

这是一个基本的例子

function sendObject(object, uri, callback) {
    var xhr = new XMLHttpRequest(),
        data = new FormData();
    data.append('object', JSON.stringify(object));
    if (callback) xhr.addEventListener('load', callback);
    xhr.open('POST', uri);
    xhr.send(data);
}
// ex. usage
sendObject(
    {foo: "bar"},
    "/somepage.php",
    function () {console.log('completed with code:', this.status)}
);

使用FormData也可以节省一些时间。如果您不能期望它可用,只需执行

postData = encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&' + etc;

答案 1 :(得分:0)

正如另外两个答案所说,对于一个带有Javascript与服务器(PHP页面)通信的HTML页面,您需要使用XMLHttpRequest,即AJAX。关于如何使用Javascript直接使用XMLHttpRequest,Paul S.的答案是最佳答案。

然而,要记住的一件事是,如果你必须支持旧的浏览器,特别是Internet Explorer 9或更低版本,你会遇到怪癖,并建议使用一个库来实现这个目标。 。对于通用库,它不仅包括AJAX方法,还包括在请求之前,期间和之后对DOM进行数据处理和操作,最好的办法是使用jQuery。例如,对于从表单发送数据的AJAX请求:

$.ajax({
  url: 'http://www.example.com/data.php',
  data: $(form).serialize(),
  dataType: 'JSON', // JSON will be returned if possible
  type: 'POST'
}).then(function(data) { 
  ...
});

jQuery很棒,但它也是一个很大的库,如果你真的只想要或需要AJAX请求,最好找一个更小的库或use a function that's known to work cross browser。同样重要的是要注意jQuery对promises的处理方式很奇怪,这就是函数会说它会返回一个值而不是立即返回值的方式。如果将AJAX函数链接在一起而不使代码包含许多嵌套函数,则这些承诺是必需的。两个最着名的承诺库是rsvp.jsq