【问题标题】:Processing JSON output from mysql through php通过 php 处理来自 mysql 的 JSON 输出
【发布时间】:2012-03-20 01:41:03
【问题描述】:

好的,所以我设法找出了 php 代码,当我在浏览器中查看它时,它正在工作并以正确的 json 格式输出。感谢 Starx 的帮助,这是代码:

<?php
include ("Includes/dbConnect.php");

$_GET['date'];

$query2 = "SELECT * FROM events";
$checkevent = mysqli_query($cxn,$query2) or die("Couldn't execute query!");
$dates = array();
    while ($row2 = mysqli_fetch_array($checkevent))
        {
        $eventDate = $row2['eventDate'];
        $eventName = $row2['eventName'];
        $eventHost = $row2['host'];

        $dates[$eventDate] = array('title' => $eventName, 'desc' => $eventHost);

        }
    echo json_encode(array("dates" => $dates));
?>

这输出: {"dates":{"2012-03-16":{"title":"Table Quiz","desc":"MSU"},"2012-03-20":{"title":"Welcome", "desc":"我"}}}

所以我的 jquery 代码肯定有问题。我根据 Starx 的规格对其进行了更改,但仍然没有,有人有什么想法吗??

    <script type="text/javascript">
    $(document).ready(function() 
 {
$("#ical").ical({ 


beforeMonth:function(date)
    {
        $.ajax({
            type: "GET",
            url: "getCalendarEvents.php",
            dataType: "json",
            data: "date="+date,
            async: false, //stop rendering the calender until eventdates is changed.
            success: json.each(function(k,v){
                $.fn.ical.changeEventDates(v); //this function changes the eventdates
            }   
        })
    }   
});
});

</script>

【问题讨论】:

  • 以上显示脚本是否都在同一个页面上?
  • no php 单独包含在 getCalendarEvents.php 中
  • 在这里冒个泡,假设您不想要打印为Array ( [0] =&gt; Array ( [date] =&gt; $eventDate [title] =&gt; $eventName [desc] =&gt; $eventHost ) ) 的多维数组,而是想要Array ( [date] =&gt; $eventDate [title] =&gt; $eventName [desc] =&gt; $eventHost ) - 删除第一个$dates = array();
  • @Ohgodwhy,但他正在循环 while 循环。在我们看来,多维是合理的。 @ OP,检查我的更新答案
  • 您说“但似乎无法从函数中返回任何结果”,但是您知道 Ajax 是否返回了 json 吗?如果不是,这是一个服务器端问题,如果是,那么这是一个 JavaScript/Jquery 问题。要找出答案,请使用 Firefox 的 Firebug 插件,并在加载页面时检查“网络”选项卡。它将显示 Ajax 调用返回的内容(如果有的话)。如果您看到任何内容,请在此处发布。

标签: php jquery mysql json


【解决方案1】:

确保回显编码的 json 后没有进一步的操作。所以最后使用 exit() 来确认这一点

echo json_encode($dates);
exit;

更新

在这种情况下,请注意您将二维数组用于$date。当使用$date[] = array(..) 所以你必须像访问它一样

json.each(function(k,v) { 
    //Now v will hold the json format 
    $.fn.ical.changeEventDates(v);
});

更新 2

{“日期”:{“eventDate”:{“title”:“eventName”,“desc”:“eventHost”},“eventDate”:{“title”:“eventName”,“desc”:“eventHost” "}}}

这种格式不太可能,因为每个项目都有相同的密钥eventDate。你可以用另一种方式来做。在php中更改以下内容

echo json_encode(array("dates" => $dates));
exit;

现在,成功函数中的json 将保持类似的格式

function(json){
   // This will hold the json is this format
   // {"dates":{ 0 :{"title": "eventName", "desc": "eventHost"}, 1 : {"title": "eventName", "desc": "eventHost"}}}
   // Note the numeric indexing
}   

【讨论】:

  • 谢谢,但知道如何将数据库中的数据输入到函数所需的数组格式中???它需要是 {"dates":{"eventDate":{"title": "eventName", "desc": "eventHost"}, "eventDate": {"title": "eventName", "desc": "事件主机"}}}
  • @rudawg,是的,这就是我在更新中展示的示例所做的
  • 嘿,谢谢 Starx,但我需要数字索引作为从数据库中提取的 eventDate。知道怎么做吗??
  • @rudawg,json 需要有唯一的索引,就像一个数组。您可以让您的函数接受{"title": "eventName", "desc": "eventHost"} 并使用我在示例中展示的.each() 方法
  • 谢谢终于让它工作了,是我的 jquery 插件有问题,json 正在返回但最初没有出现在我的日历(插件)中,我不得不前进然后返回一个月,它出现了.谢谢一百万:)
【解决方案2】:

您的代码似乎没问题,但唯一的问题是不包含除 json 字符串之外的任何其他输出,甚至是 html 标头、脚本等。它应该只包含 json 字符串而不包含其他输出

【讨论】:

  • 你能告诉我我还包括哪些其他输出吗?我一直盯着这个看,所以我的大脑有点融化
  • 例如,如果您在浏览器上手动查看此输出并查看查看页面源,如果结果为空,则输出应仅为“[]”,在此之前或之后不应出现其他内容即使是空格(“”),它也应该是干净的,您的脚本才能正确读取它。 :)
  • 所以你不应该在产生 json 输出的代码中包含你的 javascript,并且应该只在可能正在执行 ajax 请求的站点的单独部分上使用它,而不是在会回显的脚本上json输出。 :)
  • json 输出正常,所以我认为它一定与我正在创建的数组的格式有关
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 2021-09-09
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2021-09-17
  • 2012-11-28
相关资源
最近更新 更多