使用AJAX在Javascript中调用PHP函数

时间:2012-11-12 20:36:59

标签: php javascript ajax

我有一个javascript文件,我想在php服务器端调用一个函数,并使用ajax将结果返回给客户端,但我不知道如何向特定的php函数发出请求。

以下是我的文件:

javascript文件基本上从html表单中检索用户名,我想将该用户名发送到php并检查数据库的可用性。

something.js

function check_availability()
{
    var username = $.trim(document.getElementById('usernameField').value);
    var xmlhttp= new XMLHttpRequest();

    // not sure how to make the request here to check_availability() under php
}

PHP文件只会检查从js文件传递给数据库的用户名,如果它的可用返回true,则返回false。

something.php

    class Something_Model {
    private $data;
    private $table;

    public function __construct() {
        $this->data = new udata(DBSERVER, DBUSERNAME, DBPASSWORD, DBNAME);
    }

    # check for username availability
    public function check_availability()
    {
        // make the check here, but needs to retrieve username from js file
        echo "here";
    }
}

所以,在Something_Model类中,我想从javascript调用check_availability(),有人能给我一个例子来进行这个ajax调用吗?另外,如何将结果返回给javascript?我需要将其编码为JSON obj吗?

非常感谢。

4 个答案:

答案 0 :(得分:5)

您无法直接在PHP中调用函数 - 但您可以调用PHP页面,而PHP页面又可以调用PHP函数。例如......

service.php

include_once('something.php');
$model = new Something_Model();
$model->check_availability();

something.js

function check_availability() {

    var request = new XMLHttpRequest();
    request.open('GET', 'http://yoursite/service.php', false);
    request.send();

    if (request.status === 200) {
      alert(request.responseText);
    }
}

我使用了一个非常简单的XMLHttpRequest示例 - 这个示例在请求发生时实际阻塞。实际上,您可能希望使用回调并允许它以异步方式运行,但我希望尽可能缩短答案。

答案 1 :(得分:3)

您无法从客户端JavaScript调用PHP函数。

您可以向网址发出HTTP请求。

该URL可以由PHP处理。

要调用一个函数,它可以是一个除了定义函数和调用函数函数之外什么都不做的PHP脚本。 (或者它可以检查查询字符串并根据其中的一些数据的值调用函数等)。

您可以以任何您喜欢的格式返回数据。如果要返回结构化数据,JSON是一种合理的格式。

答案 2 :(得分:0)

您要做的事情称为“REST Web服务”。 外行术语是一个网页,其结果并非真正意图显示为网页,而是主要通过使用AJAX / javascript等技术以编程方式,处理和可视化方式检索。

除非你的返回类型非常简单(在这种情况下你只能返回一个文本字符串)如果你的结果数据类型很复杂,那么用javascript使它可解析的最好方法就是编码为JSON对象 - 所以它可以保存为变量,然后允许您撤消其组件 - 查看http://php.net/manual/en/ref.json.php

答案 3 :(得分:0)

你可以使用phery库,因为@Rhs指出http://phery-php-ajax.net

您的代码如下所示:

Phery::instance()->set(array(
  'check_availability' => array(new Something_Model, 'check_availability');
))->process();

然后你会从你的代码中调用它

// rename put attribute name="username" on your field
var local_phery = $('#usernameField').phery();
local_phery.make('check_availability').bind('phery:json', function(event,data){
  // deal with username suggestions
});
local_phery.remote(); // call the check_availability PHP function

在课堂上,你必须进行警报/ DOM操作

class Something_Model {
private $data;
private $table;

public function __construct() {
    $this->data = new udata(DBSERVER, DBUSERNAME, DBPASSWORD, DBNAME);
}

# check for username availability
public function check_availability($data)
{
    $r = new PheryResponse;

    if ($this->get(array('username'=> $data['username']))){
      $r->alert('Not available!');
      // Or something like using colorbox library, would be like $.colorbox({html: ''});
      $r->jquery()->colorbox(array('html' => 'Not available!'));
      $r->json($suggestions); // $suggestions would be an array with username suggestions
    } else {
      $r->alert('Available!');
    }
    // make the check here, but needs to retrieve username from js file
    return $r;
}
}