【问题标题】:JSON Stringify returns null, but document.write prints out properlyJSON Stringify 返回 null,但 document.write 正确打印
【发布时间】:2013-02-22 07:10:20
【问题描述】:

我正在尝试为 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");

这成功返回,但结果始终为空,即使我使用 document.write 打印出相同的内容,我也会得到一个格式良好的 JSON 字符串

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

我是不是误会了什么? JSON字符串和java会发生一些奇怪的事情吗?我在javascript方面没有太多经验,所以我不能就这样回来吗?

我正在 google chrome 上对此进行测试,第 25 版

注意:我认为它与 Crawljax 本身没有任何关系,因为有一个单独的插件(由其他人编写),它也有一个返回 JSON 字符串的脚本,但这似乎工作得很好。 ..

【问题讨论】:

  • 代码中有一点错别字,在第一次返回的行尾缺少一个括号。但是, elementPos 返回什么:一个 String ?还是一个物体?
  • 您能否在@benzonico 说的那样修复缺少的括号后在jsfiddle.net 中重现您的问题并发布指向它的链接?
  • 糟糕,这不是从我的来源复制和粘贴的;我把它打出来了。我的源代码中没有缺少括号

标签: java javascript json google-chrome stringify


【解决方案1】:

JavaScript 对 new Object() 过敏; 做个捷径,试试下面的,或许能解决;

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

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

【讨论】:

  • 是的,我终于想通了。作为一个 javascript 新手,我不知道。
【解决方案2】:

我认为这里的问题不在于 new Object(),但如果我在这一点上错了,请评论者随时填写。试试这个:

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

请注意,我已将“var”放在“elementpos = new Object();”前面。如果没有该变量定义,全局“elementpos”函数的第一行就是用“elementpos”对象替换自身。第一次执行可能没问题,但第二次可能会失败并出现异常,因为它试图将 new Object() 结果视为要调用的函数。

我能够在 chrome 40 下执行上面的代码并将结果字符串化,没有任何问题。另请注意,调用局部变量“result”或函数名以外的其他内容会消除这里的一些潜在混淆。

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 2014-07-31
    • 1970-01-01
    • 2017-07-16
    • 2015-04-26
    • 2020-02-11
    • 2021-08-18
    • 2015-03-24
    • 2013-03-17
    相关资源
    最近更新 更多