2011-03-15 108 views
5

我在从Javascript中调用PHP脚本而不离开当前HTML页面(如果可能的话)时遇到了一些麻烦。我知道使用AJAX是可能的,尽管可以单独使用Javascript吗?从Javascript中调用PHP脚本而不离开当前页面

语境: -

我想我的页面进行使用Javascript(使用的onclick)动画短片,然后立即调用PHP脚本将数据插入到MySQL数据库 - 无需离开当前页面,从而不会禁止动画。

我可以做的动画部分和将数据插入到数据库等,但我怎样才能在Javascript动画函数结束时调用PHP脚本?

任何指针,代码片段等将不胜感激!^_^

道歉,如果这个问题以前被问过。

+2

请参阅:[什么是AJAX,真的吗?](http://stackoverflow.com/questions/958040/what-is-ajax-really) – Orbling 2011-03-15 01:22:04

回答

1

PHP是一个服务器端语言。 JavaScript是客户端语言。

如果你想执行服务器端代码,你没有选择做一个往返服务器。如果你不想离开页面,你唯一的选择是做一个异步请求(aka AJAX)。

使用JavaScript库(如jQueryMooTools)可大大简化此类任务。例如,你可以使用MooTools在脚本的结尾这样做的请求:

var req = new Request({url: '/backend/doPHPInsert.php'}); 
req.send(); 

有办法通过这样做没有AJAX,例如,动态创建的iframe(或任何其他元素获取资源)。

9

AJAX是异步JavaScript和XML, 它的JavaScript技术,使您可以向服务器发送一个请求(如当您输入网址,你的浏览器),并有一个JavaScript字符串的响应,而不是渲染它的这一页。

问题是不同的浏览器没有以同样的方式实现AJAX,所以我建议使用jQuery进行抽象。

用jQuery做到这一点:

<script> 
$.get("backend.php",{param:value},callbackFunction); 
callbackFunction(data) 
{ 
alert(data); 
} 

</script> 
0

我的理解是可以使用AJAX,但单独使用Javascript这可能吗?

如果你不想使用XHR,你可以使用这个丑陋的黑客...

var request = 'mysql-insert.php', 
    image = new Image(); 

image.onload = function() { 
    // Success 
} 

image.onerror = function() { 
    // Error 
} 

image.src = request; 

除广泛使用AJAX的(或者需要画一个十字之前,只有真正使用域请求)。

我只会使用AJAX。 jQuery为使用XHR提供了一些很好的抽象。

+0

在这里不适用。这可以通过iframe来完成。 – AbiusX 2011-03-15 01:22:10

+0

@AbiusX它回答了问题*你可以单独使用JavaScript吗?*我假定没有XHR。 – alex 2011-03-15 01:23:24

+0

我不是在谈论没有XHR的部分,而是关于图像破解。它用于CSRF而不是一个请求。您可以添加

0

这对于使用纯正的XMLHttpRequest的一些很好的例子:(特别是向下滚动到异步例子 - 现在你用气做饭)https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest

编辑:又见http://msdn.microsoft.com/en-us/library/ms535874%28v=vs.85%29.aspx其中有实例用于处理没有本地window.XMLHttpRequest的IE版本。

现在,让我们坦率地说 - 是的,与XHR本身(特别是跨浏览器)一起工作很呆板。你可以使用几乎所有的东西(jQuery,Dojo,MooTools,Prototype,Closure,YUI等)更容易地做XHR,因为所有的都可以给你更简洁的XHR设施。

在开始让图书馆为你做这件事之前,了解你在表面下工作的情况仍然很好。 :)

0

如果你不希望包括jQuery库,你可以简单做到以下

一)广告的iframe,大小0像素因此它是不可见的,href是空白

B)执行这是你的js代码函数中

window.frames['iframename'].location.replace('http://....your . php'); 

这将执行PHP脚本,你可以为例,来更新数据库...

2

正好具有相同的起诉,所以我想出了这样的事情。您只需添加所需的代码,然后将do_the_script函数分配给onclick事件。

<script type="text/javascript"> 
var myIntv; 
function do_the_script() { 
    // play animation ... 
    var address='fancy_script.php'; 
    var tmp = new XMLHttpRequest(); 
    myIntv=setInterval(function(){ 
    tmp.addEventListener("load", doneHandler, false); 
    tmp.open("POST", address); 
    tmp.send(null); 
    }, 1000); 
} 

function doneHandler(event) { 
    // maybe do something when script is executed 
    clearInterval(myIntv); 
} 
</script> 

正如您可能已经注意到的,“调用”地址的代码每隔1秒执行一次。这是为了确保通话足够多次以获得单个肯定答案,然后调用doneHandler并在之后清除间隔。如果你认为你的服务器可以响应得更快或更慢,你应该相应地改变这些毫秒。

相关问题