【问题标题】:receiving newline inside a json object在 json 对象中接收换行符
【发布时间】:2012-03-29 09:23:28
【问题描述】:

我正在尝试使用 ajax 将 PostgreSQL 数据库中的一组文本(字段类型为文本)带入我的网页。我遇到的问题是换行符,当数据库中的文本没有换行符时效果很好,但是当我在数据库内的文本中使用换行符时,json 不会给我它存储的数据。

function selectCalendarEvents(user_id, event_datestart, event_datestop, callback) {
    var request;
    if(window.XMLHttpRequest)
        request = new XMLHttpRequest();
    else
        request = new ActiveXObject("Microsoft.XMLHTTP");

    request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
            if(request.responseText.substr(0, 6) == "error ")
                alert(errorName[request.responseText.substr(6)]);
            else {
                jsonCalendarEvents = $.parseJSON(request.responseText);
                selectEvents(user_id, event_datestart, event_datestop, callback);
            }
        }
    }
    request.open("GET", "php/calendar.php?action=selectCalendarEvents&user_id=" + user_id + "&event_datestart=" + event_datestart + "&event_datestop=" + event_datestop, true);
    request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    request.send();
}

这是我请求数据集的javascript函数

if($action == "selectCalendarEvents") {
        $user_id = $_GET["user_id"];
        $event_datestart = "'" . $_GET["event_datestart"] . "'";
        $event_datestop = "'" . $_GET["event_datestop"] . "'";

        require_once("connect.php");
        $query = "SELECT event_id, event_name, event_datestart, event_datestop, event_timestart, event_timestop, calendar_events.calendar_group, calendar_color, event_info FROM calendar_events LEFT JOIN calendar_calendars ON calendar_events.calendar_group = calendar_calendars.calendar_group WHERE user_id = " . $user_id . " AND calendar_show = true AND event_datestart <= ". $event_datestop . " AND event_datestop >= " . $event_datestart;
        $result = pg_query($connect, $query);
        if(!$result)
            die("error 1"); // query error

        $comma = '';
        $json = '{"events":[';
        while ($row = pg_fetch_row($result)) {
            $json .= $comma . '{';
            $json .= '"event_id":"' . $row[0] . '",';
            $json .= '"event_name":"' . $row[1] . '",';
            $json .= '"event_datestart":"' . $row[2] . '",';
            $json .= '"event_datestop":"' . $row[3] . '",';
            $json .= '"event_timestart":"' . $row[4] . '",';
            $json .= '"event_timestop":"' . $row[5] . '",';
            $json .= '"calendar_group":"' . $row[6] . '",';
            $json .= '"calendar_color":"' . $row[7] . '",';
            $json .= '"event_info":"' . $row[8] . '"';
            $json .= '}';
            $comma = ',';
        }
        $json .= ']}';

        echo $json;
    }

这是我的 php,它返回数据集。如果 row[8] aka event_info 在其中存储带有换行符的文本..当我尝试使用事件填充我的日历时,似乎 json 没有在其中存储任何数据或类似的 smt。

【问题讨论】:

标签: php ajax json newline


【解决方案1】:

我发现我应该用&lt;br/&gt; 替换\r\n,它会起作用。当我将响应字符串提供给 json 时,我像这样使用replace(/\r\n/g, "&lt;br/&gt;")

jsonCalendarEvents = $.parseJSON(request.responseText.replace(/\r\n/g, "<br/>"));

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 2012-07-19
    • 1970-01-01
    • 2018-05-29
    • 2017-08-23
    • 2023-04-02
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多