这是我的典型解决方案,因此可能会有所不同。
对于PHP端,我将各种远程函数分解成单独的文件(例如'add_user.php','login.php','do_something.php'),每个文件都将响应数据设置到预定义的数组'response'中,并根据请求的操作动态地包含这些文件,例如:
switch ($_POST['action']) {
case 'addUser':
require 'add_user.php';
break;
case 'login':
require 'login.php';
break;
default:
$response['result'] = 'badaction';
break;
}
echo json_encode($response);
每个文件都被设计为解析HTTP POST请求,对其进行处理并返回JSON响应(这样双方都可以轻松地解析结果,因为PHP会自动为您准备POST值,而jQuery可以自动将JSON响应转换为对象,尽管我建议从
json.org获取JSON2库,以便您不必担心
eval()
问题),它们看起来像这样:
<?php
if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME'])) {
die;
}
do {
if (!isset($_POST['something'],$_POST['parameter'],$_POST['whatever'])) {
$response['result'] = 'badinfo';
continue;
}
} while(0);
鉴于jQuery的相对简单的AJAX请求方法,JavaScript应该不难理解。这种方法的一个好处是,如果您需要响应以其他格式(XML、URLEncoded等)呈现,那么这很容易实现;个人而言,我会向请求添加一个“format”参数,并进行解析:
$format = strtolower(isset($_REQUEST['format']) ? $_REQUEST['format'] : null);
if (!$format) {
if (isset($_SERVER) && is_array($_SERVER) && array_key_exists('HTTP_ACCEPT',$_SERVER)) {
$accept = $_SERVER['HTTP_ACCEPT'];
if (stripos($accept, 'application/json') !== false || stripos($accept, 'text/javascript') !== false) {
$format = 'json';
}
}
if (!$format) {
$format = 'url';
}
}
switch ($format) {
case 'json':
echo json_encode($response);
break;
case 'url':
default:
echo http_build_query($response);
break;
}
希望这能帮到你,如果有任何问题,请在评论中回复,我会尽可能为您解答。