2012-03-29 4 views
0

Я пытаюсь привести набор текстов из базы данных PostgreSQL (тип поля - текст) с помощью ajax на мою веб-страницу. Проблема, с которой я сталкиваюсь, - это новая строка, она отлично работает, когда в базу данных нет новых строк, но когда я использую новые строки в тексте внутри базы данных, json не дает мне хранимых данных.Получение новой строки внутри объекта 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, который возвращает набор данных. Если строка [8] aka event_info хранит текст с новыми символами в ней. Когда я пытаюсь заполнить свой календарь событиями, кажется, что json не хранит никаких данных в нем или smt.

+2

Побег новой строки в JavaScript, прежде чем parseJSON его: http://stackoverflow.com/questions/4253367/how-to-escape -a-json-string-contains-newline-characters-using-javascript – bArmageddon

+0

Вы также можете прочитать руководство по замене json [line break to html line break] (http://www.lampcoder.com/how-to-parse -line-брейки-с использованием Jquery--пост-метод-и-JSON /) –

ответ

0

Я узнал, что должен заменить \r\n на <br/>, и он будет работать. им с помощью, как этот replace(/\r\n/g, "<br/>"), когда я даю строку ответа на JSon

jsonCalendarEvents = $.parseJSON(request.responseText.replace(/\r\n/g, "<br/>")); 
Смежные вопросы