我将表数据保存到json对象。表格数据来自表格单元格中的txt输入和textareas。在json数据中保存CR/LF
我遇到一个问题与持有textarea数据的JSON元素中的CR/LF字符。 JSON数据被保存到数据库中,但是当我通过它回到了那个使用该数据填充表jQuery的功能,我得到这样的:在控制台
SyntaxError: JSON.parse: bad control character in string literal at line 1 column 67 of the JSON data
var array = JSON.parse(notes),
。
[["","","",""],["","9/23/14","",""],["","30789 detail, x_vendor_no**CR/LF HERE**
20597 header","",""],["","99 del invalid x_vendor_no","",""],["","30780","",""],["","","",""],["","","",""],["","","",""]]
:
我把记事本的JSON数据++与显示的所有字符上与CR/LF在列67
下面是我的工作JSON数据的样本有没有办法在数据中允许CR/LF?
UPDATE 11684建议使用replace来删除CRLF的\ r部分将不起作用。这里的原因:
下面是使用JSON数据的完整功能: (更新了以下更新#2的代码工作)
function PopulateTaskTableWithNotes(tableID,notesArray) {
// JSON parse removed per answer suggestion
var r, c, note;
for (r = 0; r < notesArray.length; ++r) {
for (c = 0; c < notesArray[r].length; ++c) {
note = notesArray[r][c];
$('#' + tableID + ' tr:nth-child(' + (r + 1) + ') td:nth-child(' + (c + 1) + ')').children(':first-child').val(note);
}
}
}
我仍然可以对试图解析线错误JSON数据。替换函数显然无法在数组元素中“查找”字符。
更新#2 以下是我正在创建数组:
var siteID = $('#ddlUserSites option:selected').val(),
numRows = $('#' + tableID + ' tr').length,
numCols = $('#' + tableID).find('tr:first th').length,
notesArray = new Array(numRows),
rowNum = 1,
note = '',
colNum;
while (rowNum <= numRows) {
notesArray[rowNum] = new Array(numCols);
// Reset colNum for next row iteration
colNum = 1;
while (colNum <= numCols) {
note = '';
if ($('#' + tableID + ' tr:nth-child(' + rowNum + ') td:nth-child(' + colNum + ')').children(':first-child').is('input,textarea')) {
note = $('#' + tableID + ' tr:nth-child(' + rowNum + ') td:nth-child(' + colNum + ')').children(':first-child').val();
}
notesArray[rowNum][colNum] = note;
//console.log('Note for rowNum ' + rowNum + ', colNum ' + colNum + ': ' + note);
colNum++;
}
// Remove first element in current row array
notesArray[rowNum].shift();
rowNum++;
}
// Remove first element in array
notesArray.shift();
JSON.stringify(notesArray); // Added per an answer here
console.log('Final notesArray: ' + $.toJSON(notesArray));
$.ajax({
data: {saveTaskNotes: 'true', userID:userID, siteID:siteID, taskTable:tableID, notes:notesArray},
success: function(data) {
console.log('Save task notes data: ' + data);
}
});
的“最终notesArray”控制台输出看起来不错,但现在,随着字符串化增加,上方的功能(PopulateTaskTableWithNotes)控制台输出显示它正在读取数组中的每个字符作为单独的元素!
也许这也会有帮助,至于创建和读取函数之间发生了什么:数组将被保存到单个MySQL数据库字段,然后通过$ .ajax()检索PopulateTable函数(两端)。
话虽如此,我需要看看我正在做什么/在PHP代码中的数组?
更新#3 这里的PHP函数,它的数据和写入到MySQL数据库:
function SaveTaskNotes($userID,$siteID,$taskTable,$notes) {
$notes = json_encode($notes);
$insertUpdateTaskNotesResult = '';
$insertTaskNotes = "INSERT INTO userProgress (userProgressUserID,userProgressSiteID,userProgressNotesTable,userProgressNotes) values ($userID,$siteID,'" . $taskTable . "','" . $notes . "')";
$log->lwrite('$insertTaskNotes: ' . $insertTaskNotes);
$resultInsertTaskNotes = @mysqli_query($dbc,$insertTaskNotes);
if ($resultInsertTaskNotes) {
$insertUpdateTaskNotesResult = 'insertTaskNotesSuccess';
} else {
if (mysqli_error($dbc) != '') {
$log->lwrite('INSERT TASK NOTES: An error occurred while attempting to add the task notes. Query: ' . $insertTaskNotes . ', mysqli_error: ' . mysqli_error($dbc));
}
$insertUpdateTaskNotesResult = 'insertTaskNotesFail';
}
echo $insertUpdateTaskNotesResult;
}
下面是从数据库获取数据的功能,并将其发送到上述$就功能:
function GetUserTaskNotes($userID,$siteID,$taskTableID) {
$queryGetUserTaskNotes = "SELECT userProgressNotes FROM userProgress WHERE userProgressUserID = $userID AND userProgressSiteID = $siteID AND userProgressNotesTable = '" . $taskTableID . "'";
$log->lwrite('$queryGetUserTaskNotes: ' . $queryGetUserTaskNotes);
$resultGetUserTaskNotes = @mysqli_query($dbc,$queryGetUserTaskNotes);
if ($resultGetUserTaskNotes) {
$taskNotes = mysqli_fetch_assoc($resultGetUserTaskNotes);
$log->lwrite('Retrieved $taskNotes[\'userProgressNotes\']: ' . $taskNotes['userProgressNotes']);
echo $taskNotes['userProgressNotes'];
} else {
if (mysqli_error($dbc) != '') {
$log->lwrite('GET TASK NOTES: An error occurred while attempting to retrieve the task notes. Query: ' . $queryGetUserTaskNotes . ', mysqli_error: ' . mysqli_error($dbc));
}
echo 'getTaskNotesFail';
}
}
在这两个保存和获取功能$日志输出显示阵列从不改变(与上述的js/PHP的码)和在粘贴阵列记事本++表明CR /如果始终在那里。
快速修复:'notes.replace( “\ r \ n”, “”);'。尽管如此,我不会推荐。 – 11684 2014-09-24 13:54:18
或者可能只是'notes.replace(“\ r”,“”);'。 – 11684 2014-09-24 13:54:53
@ 11684:我希望找到一个解决方案,让我保留这些新行,或以某种方式重新填充用户输入新行的textarea。 – marky 2014-09-24 13:57:16