我有一个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吗?
非常感谢。
答案 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;
}
}