变量的记录方式不同,这取决于它们是否在javascript中通过onclick功能传递

变量的记录方式不同,这取决于它们是否在javascript中通过onclick功能传递,javascript,html,Javascript,Html,我肯定有一个非常合理的答案,但我想不出来。 我有以下代码: function setMarkup(data) { response += "<div class='column' style='float: right;'> <span style='pointer: cursor;' onclick='logText(\""+data+"\")'>Switch Out<

我肯定有一个非常合理的答案,但我想不出来。 我有以下代码:

function setMarkup(data) {
     response += "<div class='column' style='float: right;'>
                   <span style='pointer: cursor;' onclick='logText(\""+data+"\")'>Switch Out</span>
                </div>";
     console.log(data);
}
function logText(data){
     console.log(data);
}

$.ajax({
        url: "api.url.com",
        method: "GET",
        crossDomain: true,
        success: function (data) {
            setMarkup(JSON.parse(data));
        },
        error: function (error) {
            console.log(error);

        }
    });
函数集合标记(数据){
响应+=”
关掉
";
控制台日志(数据);
}
函数日志文本(数据){
控制台日志(数据);
}
$.ajax({
url:“api.url.com”,
方法:“获取”,
跨域:是的,
成功:功能(数据){
setMarkup(JSON.parse(data));
},
错误:函数(错误){
console.log(错误);
}
});
其中,
data
是一个json对象。控制台中
setMarkup
函数中的
console.log(data)
的输出是正确的json格式。当被
onclick
功能调用时,
logText
函数的输出为
[object]
。如果我将
onclick='logText(\''+data+“\”)
更改为
onclick='logText(“+data+”)”
,我将获得
未捕获的语法错误:意外标识符

请解释为什么
onclick
功能输出的响应与
setMarkup
功能中的输出不同

谢谢

更新——根据@IAmDranged的答案,这意味着我的问题必须稍微改变--

上面的代码在使用一个api时可以工作,但当我切换到另一个格式稍有不同的api时,它就会中断,并给出
未捕获的SyntaxError
。另外,对上面的代码进行了轻微的更新。我的onclick代码是
onclick='logText(“+JSON.stringify(data)+”)
我以前尝试过简化它,因为我认为在问这个问题时这并不重要,但很明显它确实重要

更新2 两个api的区别在于,第一个api的格式为:
{“id”:{“0”:“10001”,“1”:“10002”,“19”:“10020”},“name”:{“0”:“name1”,“1”:“name2”…“19”:“name20”},“price”:{“0”:“20.45”,“1”:“32.54”…“19”:“17.98”}

第二种格式为:
{“id”:{“0”:“10001”、“1”:“10002”、…“49”:“10050”},“name”:{“0”:“name1”、“1”:“name2”…“49”:“name50”},“price”:{“0”:“20.45”、“1”:“32.54”…“49”:“17.98”;“imgïurl”:{“0”:“url1”、“1”:“url2”…“49”:“url50”;“imgïurlï{“0”:“urlthumb1

很明显,第二个有更多的数据。当我删除第二个中的键20到49时,代码按预期工作。在使用onclick函数时,函数可以设置的字符数是否有限制?我发现交叉点是前43个键起作用的,但只要有44个或更多键,我就会得到错误。

onclick='logText(\''+data+“\”)
将被呈现为
onclick='logText(data)

同时

onclick='logText(“+data+””)
将呈现为
onclick='logText(“+data+””)
,这会导致该错误

您可以使用浏览器检查工具检查setMarkup函数生成的html标记

您也可以在setMarkup函数中使用
console.log(response)
onclick='logText(\''+data+“\”)
将被呈现为
onclick='logText(data)

同时

onclick='logText(“+data+””)
将呈现为
onclick='logText(“+data+””)
,这会导致该错误

您可以使用浏览器检查工具检查setMarkup函数生成的html标记


您还可以在setMarkup函数中使用
console.log(response)

这与数据对象的使用上下文有关

当用作字符串表达式的一部分时,javascript引擎实际上会尝试将对象强制为原语值。这将导致调用object toString()方法,默认情况下,该方法(如object.prototype上定义的)将返回与[object stringTag]类似的内容,其中stringTag本质上是实例化对象的类,在本例中,它将是object。所有这些都由javascript引擎根据ECMAScript规范定义的规则进行处理


Console.log()的行为不同。它的行为实际上不是由ECMAScript规范定义的,而是由主机环境定义的,并且取决于特定的实现。我认为,在大多数浏览器环境中,它都会输出一个自定义字符串,表示对实际对象的实时引用。

这都是关于数据对象使用的上下文

当用作字符串表达式的一部分时,javascript引擎实际上会尝试将对象强制为原语值。这将导致调用object toString()方法,默认情况下,该方法(如object.prototype上定义的)将返回与[object stringTag]类似的内容,其中stringTag本质上是实例化对象的类,在本例中,它将是object。所有这些都由javascript引擎根据ECMAScript规范定义的规则进行处理


Console.log()的行为不同。它的行为实际上不是由ECMAScript规范定义的,而是由主机环境定义的,并且取决于特定的实现。我认为在大多数浏览器环境中,它将输出对实际对象的实时引用的自定义字符串表示形式。

我们无法告诉如何或为什么调用您的函数。我已更新问题以显示如何调用
setMarkup
函数。我们无法告诉如何或为什么调用您的函数。我已更新问题以显示
setMarkup
函数被调用,我不知道。这解释了console.log响应不同的原因,具体取决于调用它的位置。谢谢你的解释。鉴于