Php AJAX调用和JSON数据
你好 我正在学习创建对PHP脚本的AJAX调用 基本上,我想找到处理AJAX调用的最佳解决方案。在这个问题上,您可以找到我的客户端代码部分 基本上,我想在这里验证我的知识,如果我错了,可以从中得到一些如何正确使用的技巧 所以。。。我正在使用KohanaPHP框架(但也将学习ZendFramework)。我使用以下代码创建了一个测试控制器:Php AJAX调用和JSON数据,php,json,kohana,Php,Json,Kohana,你好 我正在学习创建对PHP脚本的AJAX调用 基本上,我想找到处理AJAX调用的最佳解决方案。在这个问题上,您可以找到我的客户端代码部分 基本上,我想在这里验证我的知识,如果我错了,可以从中得到一些如何正确使用的技巧 所以。。。我正在使用KohanaPHP框架(但也将学习ZendFramework)。我使用以下代码创建了一个测试控制器: public function __construct() { if (request::is_ajax()) { $this-&g
public function __construct()
{
if (request::is_ajax()) {
$this->auto_render = FALSE;
header('content-type: application/json');
}
}
public function index()
{
$result['success'] = 1;
$test_model = new Test_Model;
$items = $test_model->get_test_rows();
foreach($items as $item):
$rows[] = $item;
endforeach;
$result['rows'] = json_encode($rows);
if (request::is_ajax()) {
echo json_encode($result);
}
}
现在我得到了一些与此代码相关的问题。让我问问他们
1) 在上面提到的线程中,我被告知我不必使用$.parseJSON()代码>函数,我可以使用数据。行[0]名称
。不幸的是,它不起作用。因为这不是什么大问题,我可以使用$.parseJSON()
但是我想知道我的PHP代码中是否有任何bug
2) 我正在努力学习良好的实践和技术,并且我正在努力不违反MVC规则。我有一个与MVC相关的问题。是否可以在控制器中使用echo()
?您可能会注意到我正在使用它返回JSON编码的数据。1)jQuery.ajax
函数足够聪明,可以解析JSON响应,只要您告诉它您正在返回JSON编码的对象。以下是后端Kohana如何告诉前端jQuery他们正在控制器中用JSON说话:
$this->request->headers['Content-Type'] = 'application/json';
2) 使用echo
没有什么错,但由于您使用的是Kohana,建议从控制器内部将响应返回到浏览器客户端的方法是:
$this->request->response = json_encode($result);
在代码中:
$result['rows'] = json_encode($rows);
if (request::is_ajax()) {
echo json_encode($result);
}
我认为应该是:
$result['rows'] = $rows;
if (request::is_ajax()) {
echo json_encode($result);
}
我不知道is_ajax的目的是什么,但这可能是一个不必要的检查。但可能发生的情况是,您对行进行编码,然后对整个结果集进行编码。因此,在进行解析时,您需要对数组的行索引再次进行解析JSON 回答问题(2):是的,在控制器中进行echo
通常是不好的。我甚至可以说,在控制器中构建任何类型的字符串都是不好的
然而,在所有输出都是json的情况下,我认为只需echo json_encode($results)就更简单、更简洁了如果你真的想成为一个MVC纯粹主义者,你可以创建一个文件,它除了echo json(…)之外什么都不做代码>is_asjax函数有什么用?在我看来,根据是否接收到Ajax调用,您的页面返回不同的结果似乎有点可疑。而是考虑一个名为“格式”的变量,值为“JSON”、“XML”等。不幸的是,当我使用<代码> $ $->请求>响应= JSONYEnEnCODE($结果);<代码>脚本不返回任何内容。显然,我在KO文档中找不到任何东西。对不起,$this->request->response
是为Kohana 3.x准备的。。您正在使用Kohana 2.x,它仍然使用echo
进行输出..不必道歉。我进行了一项研究,在KO3文档中找到了它。无论如何,我现在更喜欢使用版本2.3.4,因为我认为KO3会被修改很多次(根据版本2.xchangelog)。无论如何,谢谢。是的,我在发布这个问题后注意到了这一点;)在处理之前必须处理直接和ajax请求的控制器时,我使用了simliar模式。根据请求是否为ajax来选择如何输出,这对于保持控制器逻辑的干燥非常有帮助。