2014-03-25 33 views
0

我创建了一个系统,其中一个Javascript脚本提取数据从一个鼠尾草提取物,并将其存储在一个Javascript对象(我想)。然后我需要通过PHP将数据上传到SQL数据库。Javascript动态与PHP通信

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

最佳做法?

+0

1.您可以使用“”和_GET URI_将数据传递给服务器吗?是的,但是让服务器回话可能需要编码/解码像素的很多努力。 2.最佳实践? [_XMLHttpRequest_](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)。您可能需要考虑_Origin_。 –

+0

我不需要从PHP页面获取任何数据。我不能等待图像“加载”吗?这将保证PHP脚本处理数据,因为它是服务器端? –

+0

您应该查找_error_以及_load_。我仍然认为_XMLHttpRequest_是更好的选择,现在就写一个答案.. –

回答

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; 
+0

我忘了提及,我把它写成了_POST_,因为_GET_不适合发送_JSON_,它更多的是标记/原始数据。 –

+0

这是一个很好的答案,但如果我们完全诚实的话,AJAX是我真正说jQuery使用jQuery的少数几个地方之一。它使AJAX变得更加简单和强大。 –

0

至于其他两个答案都表示,对于JavaScript的HTML页面与服务器进行通信,一个PHP页面,您将需要使用XMLHttpRequest ,又名AJAX。 Paul S.的答案是关于如何直接在Javascript中使用XMLHttpRequest的最佳答案。

但是,有一点要记住的是,如果您必须支持旧版本的浏览器,尤其是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对promise的处理很奇怪,这是函数会说它会返回一个值但不是马上的方式。如果您将AJAX函数链接在一起而不使您的代码包含许多嵌套函数,则这些承诺是必需的。两个最知名的承诺库是rsvp.jsq