从Javascript调用PHP脚本而不离开当前页面

时间:2011-03-15 01:17:02

标签: php javascript html javascript-events onclick

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

背景: -

我希望我的页面使用Javascript(使用onclick)执行简短动画,然后立即调用PHP脚本将数据插入MySQL数据库 - 所有这些都不会离开页面,因此它不会禁止动画。

我可以做的动画部分以及将数据插入数据库等等但是如何在Javascript动画函数结束时调用PHP脚本?

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

如果之前已经问过这个问题,请道歉。

7 个答案:

答案 0 :(得分:9)

AJAX是异步Javascript和XML, 它是一种Javascript技术,允许您向服务器发送请求(就像您的浏览器在输入URL时所做的那样)并将响应放在javascript字符串中,而不是在页面中呈现它。

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

使用jQuery执行此操作:

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

</script>

答案 1 :(得分: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并在之后清除间隔。如果您认为服务器响应速度更快或更慢,则应相应地更改这些毫秒数。

答案 2 :(得分:1)

你可以使用jquery ajax:

http://api.jquery.com/jQuery.ajax/

答案 3 :(得分:1)

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

如果要执行服务器端代码,则无法选择对服务器进行往返。如果您不想离开页面,您唯一的选择是执行异步请求(也称为AJAX)。

使用jQueryMooTools之类的JavaScript库可以大大简化这类任务。例如,您可以使用MooTools在脚本末尾执行请求:

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

有些方法可以在没有AJAX的情况下执行此操作,例如,动态创建iFrame(或任何其他获取资源的元素)。

答案 4 :(得分: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提供了一些很好的抽象。

答案 5 :(得分:0)

这有一些使用纯粹的XMLHttpRequest的好例子:https://developer.mozilla.org/en-US/docs/Web/API/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设施。

在你开始让图书馆为你做这件事之前,知道你在表面下工作是很好的。 :)

答案 6 :(得分:0)

如果您不想包含jquery库,可以简单地执行以下操作

a)广告iframe,尺寸为0px,因此不可见,href为空白

b)在你的js代码函数

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

这将执行php脚本,您可以进行数据库更新...