Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不离开当前页面的情况下从Javascript调用PHP脚本_Javascript_Php_Html_Onclick_Dom Events - Fatal编程技术网

在不离开当前页面的情况下从Javascript调用PHP脚本

在不离开当前页面的情况下从Javascript调用PHP脚本,javascript,php,html,onclick,dom-events,Javascript,Php,Html,Onclick,Dom Events,在不离开当前HTML页面的情况下(如果可能的话),从Javascript调用PHP脚本时遇到一些问题。我知道使用AJAX是可能的,尽管单独使用Javascript是可能的吗 背景:- 我希望我的页面使用Javascript(使用onclick)执行一个简短的动画,然后立即调用一个PHP脚本将数据插入MySQL数据库-所有这些都不离开页面,这样它就不会抑制动画 我可以做的动画部分,以及将数据插入数据库等。但是如何在Javascript动画函数的末尾调用PHP脚本呢 任何指针、代码片段等都将不胜感激

在不离开当前HTML页面的情况下(如果可能的话),从Javascript调用PHP脚本时遇到一些问题。我知道使用AJAX是可能的,尽管单独使用Javascript是可能的吗

背景:-

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

我可以做的动画部分,以及将数据插入数据库等。但是如何在Javascript动画函数的末尾调用PHP脚本呢

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


如果之前有人问过这个问题,我深表歉意。

您可以使用jquery ajax:


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

如果您想执行服务器端代码,您没有选择往返服务器。如果您不想离开页面,那么您唯一的选择就是执行异步请求(akajax)

使用诸如或之类的JavaScript库大大简化了这类任务。例如,您可以使用在脚本末尾执行请求,如下所示:

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

在没有AJAX的情况下,可以通过动态创建iFrame(或获取资源的任何其他元素)来实现这一点。

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

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

使用jQuery执行此操作:

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

</script>

$.get(“backend.php”,{param:value},callbackFunction);
调用函数(数据)
{
警报(数据);
}
我知道使用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提供了一些很好的抽象。

这有一些使用纯XMLHttpRequest的好例子:

(特别是,向下滚动到异步示例—现在您正在用煤气做饭。)

编辑:另请参阅其中的一些示例,这些示例用于处理没有本机
window.XMLHttpRequest
的IE版本

现在,让我们坦率地说——是的,使用XHR本身(尤其是跨浏览器)有点迟钝。您可以使用任何东西(jQuery、Dojo、MooTools、Prototype、Closure、YUI等)更轻松地执行XHR,因为除其他外,所有这些工具都为您提供了更简洁的XHR工具


不过,在你开始让图书馆为你做这件事之前,最好先知道你在做什么

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

a) 添加iframe,大小为0px,因此不可见,href为空

b) 在js代码函数中执行此操作

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

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

恰好遇到同样的问题,所以我提出了类似的想法。您所要做的就是添加所需的代码,并将dou脚本函数分配给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>

var myIntv;
函数do__脚本(){
//播放动画。。。
var address='fancy_script.php';
var tmp=newXMLHttpRequest();
myIntv=setInterval(函数(){
tmp.addEventListener(“加载”,doneHandler,错误);
tmp.开放(“邮政”,地址);
tmp.send(空);
}, 1000);
}
函数doneHandler(事件){
//可能在执行脚本时执行一些操作
clearInterval(myIntv);
}

您可能已经注意到,“调用”地址的代码每1秒执行一次。这是为了确保呼叫次数足够多,以便得到一个肯定的回答,然后呼叫管理员并清除间隔。如果您认为服务器可以更快或更慢地响应,则应相应更改这些毫秒。

请参阅:此处不适用。这也可以通过iframes来实现。@AbiusX它回答了一个问题:您可以单独使用JavaScript发出请求吗?我想这意味着没有XHR。我不是说没有XHR的部分,而是关于图像黑客。它用于CSRF而不是用于请求。如果需要,可以添加标记或执行JSONP。图像标签黑客是为XSRF@AbiusX我不知道你刚才说了什么,对不起。@AbiusX:没有安全软件能阻止这一切。。。指向
.php
文件的
Image()
对象可以合法使用(加载动态图像)。