使用AJAX从PHP文件中获取数据

时间:2016-02-04 14:27:05

标签: javascript php jquery ajax

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

  

未捕获的TypeError:无法读取属性' protocole'为null

protocoleGenerator.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);
        }
    });
}

这里有什么问题?

3 个答案:

答案 0 :(得分:0)

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

PS:您可以将值/调用函数作为Object.my_fun()或Object [&#39; my_func&#39;]() - 对于这种特殊情况,您访问的方式并不重要变量。例如:

   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']());

好的,我有一个减号。如果假设,该主题启动器向我们展示了他的代码的硬拷贝 - 粘贴,这里没有问题。我的建议基于错误信息 - &#34;成功功能&#34;从服务器获取带有文本&#34; null&#34;的HTTP / 200答案。使用空或无效的json响应时,jquery-ajax会调用&#34;错误处理程序&#34;。我确信它不会由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是从西里尔字符开始的。

答案 1 :(得分:0)

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

的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>

protocoleGenerator.php

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

答案 2 :(得分:0)

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

解决方案是,改变这个:

url: 'protocoleGenerator.php',  

到此:

url: './protocoleGenerator.php',

工作示例:

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

<强> PS。即使响应是404,jQuery也能运行成功函数,这很奇怪。

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