我正在使用QJSEngine,我向对象添加了一个全局对象:
QJSValue objGlobal = pobjScriptEng->globalObject();
pobjScriptEng
是一个指向 的实例的指针QJSEngine
。
我有一张全局地图,地图类型定义:
std::map<QString, QString> mpGlobals;
我遍历全局映射,将它们添加到引擎中:
for( mpGlobals::iterator itr=rmpGlobals.begin(); itr!=rmpGlobals.end(); itr++ ) {
QString strName(itr->first);
if ( objGlobal.hasProperty(strName) == false ) {
QString strData(itr->second);
QJSValue result = pobjScriptEng->evaluate(strData);
objGlobal.setProperty(strName, result);
}
}
rmpGlobals
是对全局映射的引用。
我有一个脚本,其中包含对全局的引用,全局被调用db
并且是一个 JSON 对象,其中包含:
{"db":"test","host":"localhost","usr":"root","pass":"123456"}
我在调用的循环中添加了一些调试日志,setProperty
这就是应用程序输出中显示的内容:
itr->first "db"
itr->second "{\"db\":\"test\",\"host\":\"localhost\",\"usr\":\"root\",\"pass\":\"resuocra\"}"
语法错误来自 JSON,但为什么它没有任何问题。我转储result.toString()
到控制台,它包含:
SyntaxError: 预期的标记 `,'
剧本:
function test() {
try{
console.info("---------------");
console.info("test(), Line 4");
if ( db === undefined ) {
console.info("db is undefined");
return;
}
if ( typeof db === "object" ) {
var mbr;
console.info("test(), Line 7");
console.info(db);
console.info("test(), Line 9");
for( mbr in db ) {
console.info("test(), Line12");
console.info(mbr);
console.info("test(), Line14");
}
console.info("test(), Line 14");
}
console.info("test(), Line 16");
console.info("---------------");
} catch( e ) {
console.warn( "test() WARNING: " + e );
}
}
运行我的应用程序并评估脚本时,我在“应用程序输出”中看到以下内容:
2020-04-08 08:21:36.320693+0100 XMLMPAM[3657:59571] [js] ---------------
2020-04-08 08:21:36.320732+0100 XMLMPAM[3657:59571] [js] test(), Line 4
2020-04-08 08:21:36.320747+0100 XMLMPAM[3657:59571] [js] test(), Line 7
2020-04-08 08:21:36.320762+0100 XMLMPAM[3657:59571] [js] SyntaxError: Expected token `,'
2020-04-08 08:21:36.320769+0100 XMLMPAM[3657:59571] [js] test(), Line 9
2020-04-08 08:21:36.320790+0100 XMLMPAM[3657:59571] [js] test(), Line 14
2020-04-08 08:21:36.320798+0100 XMLMPAM[3657:59571] [js] test(), Line 16
2020-04-08 08:21:36.320804+0100 XMLMPAM[3657:59571] [js] ---------------
忽略之前的所有内容,[js]
这是我的时间戳和调试信息,之后[js]
是所有控制台输出。
是什么:
SyntaxError: 预期的标记 `,'
我在全局或脚本中看不到任何错误。
如果我修改脚本并插入:
var db = {"db":"test","host":"localhost","usr":"root","pass":"123456"};
作为第一行,没有显示语法错误,一切正常,那么 global 添加 using 有什么问题setProperty
?
这是向地图添加全局的代码:
void clsXMLnode::addGlobal(QString strGlobal) {
QStringList slstGlobal = strGlobal.split(clsXMLnode::msccGlobalDelimiter);
if ( slstGlobal.length() == clsXMLnode::mscintAssignmentParts ) {
QString strName(slstGlobal[clsXMLnode::mscintGlobalName].trimmed())
,strValue(slstGlobal[clsXMLnode::mscintGlobalValue].trimmed());
msmpGlobals.insert(std::make_pair(strName, strValue));
}
}
一些定义:
clsXMLnode::msccGlobalDelimiter is "="
clsXMLnode::mscintAssignmentParts is 2
clsXMLnode::mscintGlobalName is 0
clsXMLnode::mscintGlobalValue is 1