当我使用php json_encode响应ajax请求时,我不能做的事情


Things I can't do when I use php json_encode in response to an ajax request

请问,有人能给我指点一下这个问题吗?

我正在发送一个ajax请求到php文件。一切都很好,直到我把数据类型从'html '改为'json'。

在调试过程中,我开始将这3行代码放在php文件的某些点之后:

header('Content-type: application/json');
echo json_encode(Array('message' => 'success'));
die(); 

这是我发现的:

  1. 我不能使用require_once来要求类,但我只能使用include:在第一种情况下,ajax给了我错误,在第二种情况下,它给了我消息'成功',因为它应该。

  2. 我不能在php文件中使用全局变量,只能使用默认变量

  3. 我不能使用以前包含的类的静态方法,如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]

如果你有困难,请告诉我。

谢谢