【问题标题】:Get data from PHP file using AJAX使用 AJAX 从 PHP 文件中获取数据
【发布时间】:2026-01-11 18:05:02
【问题描述】:

我正在尝试使用 AJAX 从 PHP 文件中获取一些数据,但我只收到一个错误:

未捕获的类型错误:无法读取 null 的属性“协议”

protocolGenerator.php

<?php    
    $array = array(
        'protocole' => '1029384756',
    );
    echo json_encode($array);
?>

script.js

function getDemoProtocol() {
    $.ajax({
        url: 'protocoleGenerator.php',       
        data: "",
        dataType: 'json', //data format      
        success: function (data) {
            var protocole = data['protocole'];
            console.log("Prot: " + protocole);
        }
    });
}

这里有什么问题?

【问题讨论】:

  • 您是否使用控制台的网络选项卡检查了确切的响应?
  • script.js和protocoleGenerator.php在同一个目录吗?
  • 你能看到 responseText 是什么吗? console.log(data) 也会有所帮助。
  • @andre3wap 如果成功已被触发,则不是 CORS 问题。该标题将没有任何好处
  • 问题来自其他地方,您包含的代码在这里完美运行。

标签: javascript php jquery ajax


【解决方案1】:

我现在不能发表评论 :( 并写下我的建议作为答案。看来您在protocoleGenerator.php 中输入错误。可能是结束行看起来像echo json_encode($aray);,在这种情况下json_encode() 返回纯@ 987654324@(如果你有禁用php通知)。成功函数接收到null,无法从该对象获取属性。这只是我的主观建议。可能是错误的。

P.S:您可以将值/调用函数作为 Object.my_fun() 或 Object['my_func']() - 对于这种特殊情况,您如何访问变量并不重要。例如:

   var o = {};
   o.test = 'my test value';
   o.fff = function() {return 'fff called.';};
   console.log('dot-style:' + o.test);
   console.log('arr-style:' + o['test']);
   console.log('dot-style:' + o.fff());
   console.log('arr-style:' + o['fff']());

好的,我有一个减号。如果假设,该主题启动器向我们展示了他的代码的硬拷贝粘贴,这里没有问题。我的建议基于错误消息 - “成功函数”从服务器获取 HTTP/200 答案,文本为“null”。使用空或无效的 json 响应 jquery-ajax 调用“错误处理程序”。我确信这不是由json_encode() 行为引起的——我上面的例子证明了这一点。

另一个建议是特定的服务器配置、重写、重定向或其他。但我已经排除了这个建议。

哦...

<?php
$array = array(1,2);
$аrray = array(3,4);
var_dump($array);
var_dump($аrray);

结果如下:

array(2) {
  [0] =>
  int(1)
  [1] =>
  int(2)
}
array(2) {
  [0] =>
  int(3)
  [1] =>
  int(4)
}

你看出区别了吗?我没有,但第二个$array 以西里尔字符开头。

【讨论】:

  • 您的回答是唯一相关的。看看我在 OP 下的评论。我不明白为什么有人反对它。我赞成补偿。
  • 感谢@cFreed 的支持。现在我有兴趣知道它是/曾经是什么类型的错误。另一个建议:主题起始者在不同位置有两个或多个protocoleGenerator.php 副本,或者文件名输入错误。
  • @FlashThunder,我没有任何问题,无论是 v1.12 还是 1.8.3 或 3.0.0beta jQuery .. HTTP/404 使 jQuery 调用“错误处理程序”。在这种情况下,标题“Content-Type”的存在并不重要,尽管我会在我的项目中设置它。
  • 哎呀,我的意思是'Content-Type'标头可以有任何有效值,比如text/html甚至text/plain而不是application/json
【解决方案2】:

我在本地主机上运行您的代码,它工作正常请检查您系统中的以下代码,如果您仍然遇到任何错误,请发布您的整个代码,以便我可以检查我的系统。

index.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Json</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
    function getDemoProtocol() {
        $.ajax({
            url: 'protocoleGenerator.php',       
            data: "",
            dataType: 'json', //data format      
            success: function (data) {
                var protocole = data['protocole'];
                console.log(protocole);
                alert(protocole);
                console.log("Prot: " + protocole);
            }
        });
    }
    getDemoProtocol();  // Javascript method

    // Jquery Method
    $(function (){
        $.ajax({
            url: 'protocoleGenerator.php',       
            data: "",
            dataType: 'json', //data format      
            success: function (data) {
                console.log(data);
                var protocole = data.protocole;
                console.log("Prot: " + protocole);
            }
        });
    });
</script>
</head>

<body>
</body>
</html>

protocolGenerator.php

<?php 
header('Content-Type: application/json');  
$array = array(
    'protocole' => '1029384756',
);
echo json_encode($array);
?>

【讨论】:

    【解决方案3】:

    这是因为您收到错误 404:未找到。检查控制台(勾选日志 XHR 请求复选框)。

    解决方案是,改变这个:

    url: 'protocoleGenerator.php',  
    

    到这里:

    url: './protocoleGenerator.php',
    

    工作示例:

    http://neolink.dyndns.org:81/*/1.php

    附言。即使响应为 404,jQuery 也会运行成功函数,这很奇怪。

    PS 2. 如果它不起作用(它应该!),请提供完整路径(如 http://blabla.com/1/3/45345/protocoleGenerator.php,因为这可能是服务器依赖的)

    【讨论】: