JSON Stringify返回null,但document.write正确打印出来

时间:2013-03-07 07:15:26

标签: java javascript json google-chrome stringify

我正在尝试为crawljax编写一个运行一些javascript代码的插件,如下所示:

String result = browser.executeJavaScript(script).toString();

和脚本代码:

function getElementPosition(id) {
var element = document.getElementById(id);
return JSON.stringify(elementpos(findPosX(element), findPosY(element)));
}

function elementpos(x, y) {
elementpos = new Object();
elementpos.x = x;
elementpos.y = y;
return elementpos;
}


return getElementPosition("foo");

这会成功返回,但结果总是为null,即使我使用document.write打印出相同的东西,我也会得到格式正确的JSON字符串

{"x":8, "y":24}

我误解了什么吗? JSON字符串和java会发生一些奇怪的事吗?我没有很多javascript的经验,所以我不允许这样回来吗?

我正在谷歌浏览器上测试这个,第25节

注意:我不认为它与Crawljax本身有任何关系,因为它是一个单独的插件(由其他人编写),它还有一个返回JSON字符串的脚本,但这似乎完全正常。 ..

2 个答案:

答案 0 :(得分:1)

JavaScript对新对象(); 做过敏,请尝试下面的那个,这可能会解决;

 return JSON.stringify({x:findPosX(element), y:findPosY(element)});

使用 new Object(); 语法创建的对象在javascript中带来了许多奇怪的问题。

答案 1 :(得分:0)

我不认为这里的问题是新的Object(),但如果我在这一点上错了,请随时填写我的意见。试试这个:

function elementpos(x, y) {
    var elementpos = new Object();
    elementpos.x = x;
    elementpos.y = y;
    return elementpos;
}

请注意我已经放了" var"在" elementpos = new Object();"前面。没有那个变量定义,全局" elementpos"的第一行。功能是用" elementpos"替换自己。宾语。它第一次执行可能会没问题,但是第二次可能会因异常而失败,因为它试图将新的Object()结果视为要调用的函数。

我能够执行上面的代码并在chrome 40下将结果字符串化而没有任何问题。另请注意,调用局部变量"结果"或者除了函数名之外的东西会在这里消除一些潜在的混淆。