我在从Javascript调用PHP脚本时遇到了一些麻烦,而没有离开当前的HTML页面(如果可能的话)。我知道可以使用AJAX,虽然可以单独使用Javascript吗?
背景: -
我希望我的页面使用Javascript(使用onclick)执行简短动画,然后立即调用PHP脚本将数据插入MySQL数据库 - 所有这些都不会离开页面,因此它不会禁止动画。
我可以做的动画部分以及将数据插入数据库等等但是如何在Javascript动画函数结束时调用PHP脚本?
任何指针,代码片段等都将不胜感激! ^ _ ^
如果之前已经问过这个问题,请道歉。
答案 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:
答案 3 :(得分:1)
PHP是一种服务器端语言。 JavaScript是一种客户端语言。
如果要执行服务器端代码,则无法选择对服务器进行往返。如果您不想离开页面,您唯一的选择是执行异步请求(也称为AJAX)。
使用jQuery或MooTools之类的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脚本,您可以进行数据库更新...