Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jquery将php字符串数据转换为Json对象_Php_Javascript_Jquery_Json - Fatal编程技术网

使用Jquery将php字符串数据转换为Json对象

使用Jquery将php字符串数据转换为Json对象,php,javascript,jquery,json,Php,Javascript,Jquery,Json,我需要从PHP到jquery获取一些Json数据 我需要一个javascript方法中的以下格式 function returnJson() { return { events: [ { "id": 1, "start": new Date(2013, 4, 26, 12), "end": new Date(2013, 4, 26, 13, 30)

我需要从PHP到jquery获取一些Json数据

我需要一个javascript方法中的以下格式

function returnJson()
{
   return {
            events: [
            {
                "id": 1,
                "start": new Date(2013, 4, 26, 12),
                "end": new Date(2013, 4, 26, 13, 30),
                "title": "Lunch with Mike"
            },
            {
                "id": 2,
                "start": new Date(2013, 4, 27, 14),
                "end": new Date(2013,4, 27, 14, 45),
                "title": "Dev Meeting"
            }]
       };
}
为此,我在javascript中执行以下操作:

function returnJson()
{
    var eventResult = $.getJSON("../PHP/PhpAction.php?f=fetchCalendarEvent");
    return eventResult;
}
在php中:

 function fetchCalendarEvent()
          {
              $tablename = "tb_calendar";

              $sql = "SELECT eventId,userId,enentName,eventText,EXTRACT(YEAR FROM startTime) AS startyear,EXTRACT(MONTH FROM startTime) AS startMonth,EXTRACT(DAY FROM startTime) AS startDay,EXTRACT(HOUR FROM startTime) AS startHour,EXTRACT(MINUTE FROM startTime) AS startMin,EXTRACT(YEAR FROM endTime) AS endyear,EXTRACT(MONTH FROM endTime) AS endMonth,EXTRACT(DAY FROM endTime) AS endDay,EXTRACT(HOUR FROM endTime) AS e`enter code here`ndHour,EXTRACT(MINUTE FROM endTime) AS endMin FROM ".$tablename." WHERE userId='".$_SESSION['userid']."' AND isActive=1";

                        $q = mysql_query($sql);
                        $i=1;           
                        $eventData="{events: [";

                        if (!mysql_num_rows($q)) {
                            echo 'No records found';
                        }
                        else
                        {                                           
                            while ($row = mysql_fetch_assoc($q)) {

                                $eventData.="{'id':".$row['eventId'].",";


                                $eventData.="'end': new Date(".$row['startyear'].",".$row['startMonth'].",".$row['startDay']."," .$row['startHour'].",".$row['startMin']."),";

                                $eventData.="'start': new Date(".$row['endyear'].",".$row['endMonth'].",".$row['endDay'].",".$row['endHour'].",".$row['endMin']."),";

                                $eventData.="'title':'".$row['enentName']."'},";

                                $i++;
                            }                   
                        }   
                        $eventData= rtrim($eventData, ",");

                        $eventData.="]}";
                        echo json_decode($eventData);
          }
我签入firebug,php方法返回如下数据:

{ events: [ {
        'id': 2,
        'end': new Date(2013, 4, 27, 18, 38),
        'start': new Date(2013, 4, 27, 18, 38),
        'title': 'test'
    }, {
        'id': 3,
        'end': new Date(2013, 4, 23, 11, 0),
        'start': new Date(2013, 4, 23, 14, 15),
        'title': 'testing23'
    }
] }

谁能帮帮我吗。我是php新手。任何帮助都将不胜感激

向浏览器发送AJAX数据时,应添加适当的头和MIME类型:

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
    function requestData() {
        $.ajax({
            url: url,
            dataType: 'json',
            success: function(json) {
                events = json.events;

                useData(events);
            },
            error: function (xhr, status, error) {
                alert('Status: ' + status +' Error: ' + error);
            }
        });
    }
以下是有关如何使用发送到浏览器的数据的一些示例代码:

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
    function requestData() {
        $.ajax({
            url: url,
            dataType: 'json',
            success: function(json) {
                events = json.events;

                useData(events);
            },
            error: function (xhr, status, error) {
                alert('Status: ' + status +' Error: ' + error);
            }
        });
    }

在您的情况下,错误消息说明了什么?

在将AJAX数据发送到浏览器时,您应该添加适当的头和MIME类型:

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
    function requestData() {
        $.ajax({
            url: url,
            dataType: 'json',
            success: function(json) {
                events = json.events;

                useData(events);
            },
            error: function (xhr, status, error) {
                alert('Status: ' + status +' Error: ' + error);
            }
        });
    }
以下是有关如何使用发送到浏览器的数据的一些示例代码:

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
    function requestData() {
        $.ajax({
            url: url,
            dataType: 'json',
            success: function(json) {
                events = json.events;

                useData(events);
            },
            error: function (xhr, status, error) {
                alert('Status: ' + status +' Error: ' + error);
            }
        });
    }

在您的例子中,错误消息说了什么?

Php有一个名为json_encode的函数,它将处理json输出的生成

以下是一个例子:

$o = array();
$o['events'] = array();
while ($row = mysql_fetch_assoc($q))
{
    $event = array();
    $event['id'] = $row['id'];
    $event['start'] = "new Date(".$row['startyear'].",".$row['startMonth'].",".$row['startDay']."," .$row['startHour'].",".$row['startMin'].")";
    $event['end'] = "new Date(".$row['endyear'].",".$row['endMonth'].",".$row['endDay'].",".$row['endHour'].",".$row['endMin'].")";
    $event['title'] = $row['title'];

    $o['events'][] = $event;
}

return json_encode($o);
javscript代码可以是这样的:

function returnJson()
{
    var events = $.getJSON("../PHP/PhpAction.php?f=fetchCalendarEvent");

    for (var i = 0; i < events.length; i++) {
        var event = events[i];
        event.start = eval(event.start);
        event.end = eval(event.end);

        events[i] = event;
    }

    return events;
}
函数returnJson()
{
var events=$.getJSON(“../PHP/PhpAction.PHP?f=fetchCalendarEvent”);
对于(var i=0;i
Php有一个名为json_encode的函数,它将处理json输出的生成

以下是一个例子:

$o = array();
$o['events'] = array();
while ($row = mysql_fetch_assoc($q))
{
    $event = array();
    $event['id'] = $row['id'];
    $event['start'] = "new Date(".$row['startyear'].",".$row['startMonth'].",".$row['startDay']."," .$row['startHour'].",".$row['startMin'].")";
    $event['end'] = "new Date(".$row['endyear'].",".$row['endMonth'].",".$row['endDay'].",".$row['endHour'].",".$row['endMin'].")";
    $event['title'] = $row['title'];

    $o['events'][] = $event;
}

return json_encode($o);
javscript代码可以是这样的:

function returnJson()
{
    var events = $.getJSON("../PHP/PhpAction.php?f=fetchCalendarEvent");

    for (var i = 0; i < events.length; i++) {
        var event = events[i];
        event.start = eval(event.start);
        event.end = eval(event.end);

        events[i] = event;
    }

    return events;
}
函数returnJson()
{
var events=$.getJSON(“../PHP/PhpAction.PHP?f=fetchCalendarEvent”);
对于(var i=0;i
不能在json中格式化日期对象。一个选项是使用时间戳,并在json解析期间转换它

如果您检查,您将看到您的json给出错误

您的语法是Javascript对象表示法,而不是json表示法。Javascript可以使用函数生成json

我只是仔细检查了一下,如果您将javascript对象字符串化,将进行以下转换:

var date = new Date(2013, 4, 26, 12);
var string = JSON.stringify(date);
console.log(string);
//output = 2013-05-26T10:00:00.000Z
console.log(JSON.parse(string));
//will again output 2013-05-26T10:00:00.000Z

因此,您可以使用JSON.stringify将日期对象转换为字符串。但是您不能将它们重新格式化为日期对象。

您不能将日期对象格式化为json格式。一个选项是使用时间戳,并在json解析期间转换它

$data = preg_replace('@new Date\(([^\)]*)\)@', '"$1"', $data);
$data = json_decode($data, true);
如果您检查,您将看到您的json给出错误

您的语法是Javascript对象表示法,而不是json表示法。Javascript可以使用函数生成json

我只是仔细检查了一下,如果您将javascript对象字符串化,将进行以下转换:

var date = new Date(2013, 4, 26, 12);
var string = JSON.stringify(date);
console.log(string);
//output = 2013-05-26T10:00:00.000Z
console.log(JSON.parse(string));
//will again output 2013-05-26T10:00:00.000Z
因此,您可以使用JSON.stringify将日期对象转换为字符串。但是您不能将它们格式化回日期对象

$data = preg_replace('@new Date\(([^\)]*)\)@', '"$1"', $data);
$data = json_decode($data, true);
结果:

新日期(2008,3,30,0,31,26)=>“2008,3,30,0,31,26”

结果:

新日期(2008,3,30,0,31,26)=>“2008,3,30,0,31,26”


可能您的web服务器确实为JSON返回了错误的html头。也许您应该使用
jQuery.ajax()
-它有更多的选项来“调整”…将数据存储在关联数组中并在其上运行json\u encode()。json格式的字符串无效,它不一致:所有字符串都应该包含在双引号中,并且没有对象的JSON表示形式。
Date
对象。是的,我认为您使用了错误的括号:您想要发送一个对象数组。。。它不应该是类似于
[{x:''…',y:'''.}],{x:'''.''.''.''.'''.}]
?@Basic:ISO标准是从ECMAScript 5开始的,因此并非所有浏览器都能正确处理它。OP:方法确实是使用UNIX纪元中的秒数,并将它们发送到客户端,然后使用JavaScript在那里进行转换(请记住,
Date
期望一个值为UNIX纪元以来的毫秒数)。可能您的web服务器返回了错误的JSON html头。也许您应该使用
jQuery.ajax()
-它有更多的选项来“调整”…将数据存储在关联数组中并在其上运行json\u encode()。json格式的字符串无效,它不一致:所有字符串都应该包含在双引号中,并且没有对象的JSON表示形式。
Date
对象。是的,我认为您使用了错误的括号:您想要发送一个对象数组。。。它不应该是类似于
[{x:''…',y:'''.}],{x:'''.''.''.''.'''.}]
?@Basic:ISO标准是从ECMAScript 5开始的,因此并非所有浏览器都能正确处理它。OP:方法确实是使用UNIX纪元中的秒数,并将它们发送到客户端,然后使用JavaScript将它们转换到那里(请记住,
Date
期望一个值是自UNIX纪元以来的毫秒数)。感谢您的代码。但是在这种情况下,id和标题是可以的。但是它如何处理开始和结束日期呢?因为在这种情况下,我需要新的日期(2013、4、26、12),并且没有起始行。我将月、年、日、分钟、小时作为saparate行。如果您以“new Date()”格式发送日期,它将被解释为文本。因此,我将日期转换为时间戳,然后在javascript端再次将其转换为日期,如下所示:“var date=new date(timestamp*1000);”它乘以1000,因为JS使用毫秒。我有一个返回数据的javascript函数。函数是函数getEventData(){return{events:[{“id”:2,“start”:new Date(2013,4,24,12,0),“end”:new Date(2013,4,24,11,0),“title”:“test”}]};}当我编写上述函数(使用硬核数据)时,工作正常当我使用某个变量时,它就不起作用了。。在警报中,同样的数据也会出现。如果我只是复制警报数据并粘贴作为回报,它工作得很好。@amitghosh正如我所说的,“新日期”被简单地解释为一个字符串。然而