请问,有人能给我指点一下这个问题吗?
我正在发送一个ajax请求到php文件。一切都很好,直到我把数据类型从'html '改为'json'。
在调试过程中,我开始将这3行代码放在php文件的某些点之后:
header('Content-type: application/json');
echo json_encode(Array('message' => 'success'));
die();
这是我发现的:
我不能使用require_once来要求类,但我只能使用include:在第一种情况下,ajax给了我错误,在第二种情况下,它给了我消息'成功',因为它应该。
我不能在php文件中使用全局变量,只能使用默认变量
我不能使用以前包含的类的静态方法,如MyClass::myStaticMethod(),只能使用实例。
这是正常的还是我做错了什么?我在哪里可以找到我不能使用的php特性列表?既然我需要这些功能,有没有办法克服这个问题?
在服务器端,你可以做任何你想做的,只要你尊重JSON的规则。
作为一种方法,您可以开始构建一个可以工作的静态JSON文件。然后用PHP生成的等价物一块一块地替换它的部分,这意味着(并且限于),头和内容
在浏览器端,您需要的是一个预定义的格式(PHP脚本的输出),没有办法知道是否使用了required_once或全局变量。
看一下
<?php
//1st Situation
header('Content-type: application/json');
echo json_encode(Array('message' => 'success'));
?>
//respective JS would be
<script>
var json = ajax_response;
</script>
<?php
//2nd Situation with no content header (html default)
echo json_encode(Array('message' => 'success'));
?>
//respective JS would be
<script>
var json =$.parseJSON(ajax_response);
</script>
您在服务器端所需要做的就是将内容类型设置为application/json,使用json_encode函数对数据进行编码并输出。
<?php
header('content-type: application/json; charset=utf-8');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo json_encode($data);
?>
你可以测试它,例如在控制台中运行这行:
$.ajax({url: 'data.php'})
// Response: [1,2,3,4,5,6,7,8,9]
如果你有困难,请告诉我。
谢谢