我正在创建一个系统,其中Javascript脚本从Sage提取中提取数据,并将其存储在Javascript对象中(我猜JSON)。然后我需要通过PHP将数据上传到SQL数据库。
我曾想过使用iframe,通过将src更改为PHP页面URL,然后通过url将GET变量传递给页面。我想知道我是否真的可以使用标签来做到这一点?通过创建新图像并将src设置为PHP页面URL(再次,将GET变量传递给它),那么PHP页面可以完成其余的工作吗?我知道图像不会显示任何内容,也不需要。我只需要一种方法将数据传递给PHP页面。
最佳做法?
答案 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.js和q。