我使用这个简单的javascript代码从javascript调用php函数。
var a = new XMLHttpRequest();
a.open("GET","save.php");
a.onreadystatechange = function() {
if( a.readyState == 4) {
if( a.status == 200) {
alert("Worked");
}
else alert("HTTP error "+a.status+" "+a.statusText);
}
}
a.send();
在这个例子中,我有一个包含在save()
文件中的php函数save.php
。
我有一些问题:
1)如何调用一个php函数,它位于有javascript函数的同一个文件中? (我想把一个php方法调用到有javascript调用者的同一个文件中)
2)是否可以将php数组作为参数传递?
答案 0 :(得分:1)
首先:你不是在“调用一个函数”。您正在向服务器发出请求。请求在php中被“解释”,并且php具有被调用的函数。 Js从不直接调用php(一个是正面,一个是后面)。
回答你的问题:
您需要将请求发送到您正在显示的同一页面,但您的js也将被执行。
是的,但我建议发布一条不是get的帖子(对数组使用var_name [],其中var_name是数组的名称)。
附注: 将php和js放在同一个文件中通常是个坏主意。尝试尽可能地将前端与后端隔离开来(一开始可能很难,但它可以避免你因为胡格的头痛而死)。
您正在使用的脚本适用于简单的事情,但缺少很多东西(如果目的地被移动并且您获得重定向状态,如果无法访问,如果您需要回调,等等)。你也受限于GET,有些事情你可能更喜欢POST方法。我建议使用js lib来处理你的请求(比如jQuery ajax,prototype ajax等)来处理这些事情。或者你可以扩展你的脚本。
答案 1 :(得分:0)
通常,使用JSON文档作为交换格式,最好在PHP和Javascript之间传递数组。
答案 2 :(得分:0)
你必须按照描述的方式使用ajax调用 -
在save.php页面的javascript端 -
$.ajax({
type:"POST",
data:'demodata',
url:"save.php?action=php_function", // place your php function name here
dataType: "html",
success:function(response){
alert(response); // It will alert value returned by php function
},
failure:function(response){
alert("there is an error.");
},
});
在save.php页面的PHP端 -
<?php
if(function_exists($_GET['action']))
{
$_GET['action']();
}
else
{
echo 'There is some error.';
}
function php_function()
{
// some code
echo "result";
}
?>
答案 3 :(得分:0)
您必须检测通过ajax发出的请求,以便您可以运行save()
函数,如果没有,则可以正常输出页面,包含JavaScript调用者。
有很多方法可以检测ajax,一种方法是设置X-Requested-With
标头,你可以在PHP端检查它。
save.php
function save(){
// some PHP code here
}
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
// request was made via ajax, call the function
save();
exit(); // exit so no page content is sent via ajax
}
// output the page content including JavaScript caller
JavaScript的:
var a = new XMLHttpRequest();
a.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); // set the header
// continue with your XHR code
发送数组的最佳方法是在通过POST发送之前对JSON进行编码,然后在PHP端进行JSON解码。
JavaScript的:
a.open("POST","save.php");
a.send('json=' + encodeURIComponent(JSON.encode(myArray)));
PHP
function save(){
$myArray = json_decode($_POST['json']);
}