【问题标题】:undefined error with ajaxcall to receive json dataajaxcall 未定义错误以接收 json 数据
【发布时间】:2009-06-24 07:41:41
【问题描述】:

我的问题是我 解决不了这个问题

如果我调用 php 脚本,我得到的只是一个未定义的错误

这是我用于测试 AND 的代码

this is the original code from the creator that is giving me a headache

function startJsonSession(){     
    $.ajax({        url: "jsontest.php?action=startjson",       
        cache: false,     
        dataType: "json",   
         complete: function(data) {             
             username = data.username;               
              alert(username);      
         }    
    });
}

//phpscript

if ($_GET['action'] == "startjson") { startJson(); } 


    function startJson() {   

header('Content-type: application/json'); 
    $items = '';     
echo json_encode(array(          
     "username" => "bob",    
    "items" => array( "item1" => "sandwich",   
    "item2" => "applejuice"  
    )     
    )); 


 }

谢谢,理查德

编辑了我的问题,因为:
此函数以不同的方式返回 json 数据 因此,下面介绍的解决方案不会产生相同的结果。

function startChatSession() {
    $items = '';
    if (!empty($_SESSION['openChatBoxes'])) {
        foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
            $items .= chatBoxSession($chatbox);
        }
    }


    if ($items != '') {
        $items = substr($items, 0, -1);
    }

header('Content-type: application/json');
?>
{
        "username": "<?php echo $_SESSION['username'];?>",
        "items": [
            <?php echo $items;?>
        ]
}

<?php


    exit(0);
}

【问题讨论】:

  • 您是否收到错误消息?
  • 你是在动态调用由“action”命名的函数(在 $_POST 中),因为 action==startjson 和 function==startjsonSession()。只是想排除它......
  • 我应该澄清一下,你的查询字符串是 url:"jsontest.php?action=startjson" 并且 php 函数是 startjsonSession,所以如果你的 php 处理看起来像 return $_POST['action']( ) 有点事情,那么它就不会调用函数
  • 编辑了我的问题,但你的速度更快
  • 可能会弄错,但我认为 $.ajax 是 $_POST,所以请尝试查看 $_POST['action'] === "startjson"

标签: php jquery ajax json


【解决方案1】:

我用你的代码重新创建并弄清楚了。返回的对象是 XMLHttpRequest 类型。它有一个名为 responseText 的属性,其中包含一个带有数据的 json 字符串。

所以这行得通..

var decodedData = eval("(" + data.responseText + ")");
username = decodedData.username;
alert(username);

有点乱,但可以解决问题:-)

p.s 如果有帮助,我在 firefox 中使用 firebug 并在 js 代码中添加断点想通了

编辑如下: 不想进行评估,您可以使用它并且它可以工作:

$.getJSON("json.php?action=startjson",

  function(data) {
    username = data.username;
    alert(username);
  }
);

编辑显示我对成功函数所做的事情:

$.ajax({
  url: "json.php?action=startjson",
  cache: false,
  dataType: "json",
  success: function(data) {

    username = data.username;
    alert(username);
  }
});

【讨论】:

  • 谢谢,但这不是一个糟糕的解决方法。我读到 eval 并不总是可靠的 json。我将尝试您的解决方案,看看我是否可以让整个聊天代码正常工作。如果你感兴趣。我将来自创建者的原始代码的链接放在我的问题中。我希望我不必对原始代码进行太多更改。
  • eval() 不安全,即如果您不信任来源。如果您查看 json.org,那么您可以找到一些解析器,例如 code.google.com/p/json-sans-eval
  • 我查看了原文,不同之处在于它指定了一个“成功”,而不是指定“完整”功能。这似乎做了任何评估或任何事情,那么“数据”已经是一个js对象
  • 好的,但是那个返回 undefined 也
  • 嗯,那我就卡住了。我刚刚尝试过,它对我的​​效果很好,只是对您的原始帖子进行了更改:-(
【解决方案2】:

用户名是全局变量吗? 如果不是,您应该在前面加上“var”关键字。

username = data.username -> var username = data.username;

【讨论】:

  • 用户名只用在补全函数内部,应该没问题吧?
  • 这可能会导致 IE 出现“未定义”错误并破坏当前页面。
【解决方案3】:

最后我得到了它的工作。

我安装了 firebug,发现 php 脚本返回的是 html 标头而不是 json。

突然就开始工作了,我真的很想知道问题出在哪里,但我不能告诉你。

无论如何,谢谢你坚持这么久,大卫

【讨论】:

    【解决方案4】:

    我也不明白的是它打破了 php 模式,而不是像使用 xml 那样回显它

    ?>
    {
            "username": "<?php echo $_SESSION['username'];?>",
            "items": [
                <?php echo $items;?>
            ]
    }
    
    <?php
    

    这和上面一样吗(对象数组包含字面量数组)?

    echo json_encode(array(          
                 "username" => "bob",    
                 "items" => $items
            )     
                 ));  
     }
    

    【讨论】:

    • 我认为这与例如吐出与 html 相同的文字字符相同。只是做同一件事的不同风格
    • 是的,这就是手动执行 json_encode 函数所做的事情。显然使用 json_encode 更安全,因为手写会出错 :-)
    猜你喜欢
    • 2015-10-19
    • 2021-11-12
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多