Я использовал эту функцию в течение некоторого времени с большим успехом, но совсем недавно она перестала работать. Я ничего не изменил; тот же браузер, сервер, одна и та же библиотека jquery, все одинаково, поэтому я теряюсь на том, что неправильно. Следующая функция принимает длинную строку и преобразует ее в объект:
$(function()
{
var _sid = getUrlVar('AICC_SID');
var _url = getUrlVar('AICC_URL');
$.get(_url,{command:"GetParam",version:"2.2",session_id:_sid},function(response)
{
var _obj = toJSON(response);
console.log(_obj);
});
});
function toJSON(str)
{
var obj = {};
str.replace(/([^=]+)=(.*)\n/g, function (_, name, value)
{
console.log('name : ' + name);
console.log('value : ' + value);
obj[name] = $.trim(value);
});
return obj;
}
Здесь строка, которая преобразуется:
ERROR=0
ERROR_TEXT=Successful
VERSION=2.2
AICC_DATA=[CORE]
STUDENT_ID=0425655
STUDENT_NAME=Doe, John B
SCORE=
TIME=00:00:00
CREDIT=C
LESSON_LOCATION=1_5
LESSON_STATUS=NULL
[Core_Lesson]
[Objectives_Status]
Проблема заключается в том, что .replace()
похоже, не работает. Функция toJSON()
преобразует строку в объект, но всегда возвращает и пустой объект. Надеюсь, это прояснит, что случилось.
Попробуйте удалить \n
из вашего RegEx.
Так выглядит:
str.replace(/([^=]+)=(.*)/g,...
Я предполагаю, что это проблема, связанная с разрывами строк.
ОБНОВИТЬ
Попробуйте обновить toJSON()
следующим образом:
function toJSON(str) {
var obj = {};
str.replace(/([^=]+)=(.*)/g, function (_, name, value) {
name = name.replace(/\n/g, '');
console.log('name : ' + name);
console.log('value : ' + value);
obj[name] = $.trim(value);
});
return obj;
}
/n
после каждой строки, поэтому в console.log()
она показывает новую строку.