从javascript调用php方法

时间:2014-04-18 13:16:24

标签: javascript php xmlhttprequest

我使用这个简单的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数组作为参数传递?

4 个答案:

答案 0 :(得分:1)

首先:你不是在“调用一个函数”。您正在向服务器发出请求。请求在php中被“解释”,并且php具有被调用的函数。 Js从不直接调用php(一个是正面,一个是后面)。

回答你的问题:

  1. 您需要将请求发送到您正在显示的同一页面,但您的js也将被执行。

  2. 是的,但我建议发布一条不是get的帖子(对数组使用var_name [],其中var_name是数组的名称)。

  3. 附注: 将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']);
}