3

我有一个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

4 回答 4

5

您不能直接在 PHP 中调用函数 - 但您可以调用 PHP 页面,该页面又可以调用 PHP 函数。例如...

服务.php

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

东西.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 示例——这个示例在发出请求时实际上是阻塞的。实际上,您可能希望使用回调并允许它异步运行,但我想使答案尽可能简短。

于 2012-11-12T20:43:14.740 回答
3

您不能从客户端 JavaScript 调用 PHP 函数。

您可以向 URL 发出 HTTP 请求。

该 URL 可以由 PHP 处理。

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

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

于 2012-11-12T20:39:29.870 回答
0

正如@Rhs 指出的那样,您可以使用 phery 库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;
}
}
于 2012-11-13T00:47:32.987 回答
0

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

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

于 2012-11-12T20:42:14.737 回答