我在服务器端使用Node.Js,它生成一个JSON,我将其转换为Object,我需要从客户端访问它,特别是从HTML页面中的脚本访问它。
编辑:服务器端代码
在服务器端,这是发生post请求时的代码:
exports.plot = function(req, res){
var json;
request.post({
uri:"http://127.0.0.1:8080/api/v1/datapoints/query",
headers: {'Content-Type': 'application/json'},
body:req.body.txt1
},function (error, response, body) {
if (!error && response.statusCode == 200) {
var json = JSON.parse(body); //JSON converted in an object
res.render('query', json);
}
}
);
};
有人建议我使用服务器端脚本(类似于ASP.NET中使用的脚本)来访问该对象。
因此,我使用了该语法来获得我想要的值,但在Chrome控制台上,我收到了以下错误:"Uncaught SyntaxError:Unexpered token()".
我哪里错了?
这是代码
<script>
function(){
var start = new Date();
var queryLength = <%= queries.length %>, // This gives me a number correctly
timestamps = [],
tagsString = [],
values = [],
dataPoints = [];
var metric = <%= queries[0].results[0].name %>; //Gives me correctly a string
//il for che mi scorre tutta la risposta
for (var j = 0; j < queryLength; j++)
{
}
}
</script>
完整的错误是:
Uncaught SyntaxError: Unexpected token ( jquery-1.9.1.js:603
(anonymous function) jquery-1.9.1.js:603
jQuery.extend.globalEval jquery-1.9.1.js:604
jQuery.fn.extend.domManip jquery-1.9.1.js:6187
jQuery.fn.extend.append jquery-1.9.1.js:5949
(anonymous function) jquery-1.9.1.js:6074
jQuery.extend.access jquery-1.9.1.js:852
jQuery.fn.extend.html jquery-1.9.1.js:6038
(anonymous function) format-timestamp.js:36
fire jquery-1.9.1.js:1037
self.fireWith jquery-1.9.1.js:1148
done jquery-1.9.1.js:8074
callback jquery-1.9.1.js:8598
该错误与JSON或服务器端代码无关。
语法错误在这里:
function(){
它看起来像是函数表达式的开头,但您并没有将其用作表达式。它与函数声明的语法冲突,看起来像这样:
function functionName(){
解析器希望函数的名称跟在function
关键字后面,但实际上有一个括号。
如果你想声明一个函数,应该有一个函数名。如果要使用函数表达式,则需要将其用作表达式,即:
(function(){
...
})();
我添加了()
来实际调用该函数,因为否则它只会创建该函数并在不调用它的情况下将其丢弃
如果您想使用jQueryready
事件的简写,它看起来像这样:
$(function(){
...
});
编辑:
要在Javascript代码中重新创建对象或数组,您必须以文字语法将其打印在代码中。您可以为此使用JSON,因为它是Javascript对象语法的一个子集。
伪代码(我不知道node.js有什么JSON库):
var queries = <% toJson(queries) %>;
它看起来像是一个jquery错误。。我认为function(){}
调用是错误的——你需要$(function() {});
——别忘了在末尾添加);
。
或者,如果您调用的不是Jquery ready函数,则存在语法错误,应该执行function myFunction(){}
试试这个
// replace `function(){}` width `$(function() {});`
$(function() {
var start = new Date();
var queryLength = <%= queries.length %>, // This gives me a number correctly
timestamps = [],
tagsString = [],
values = [],
dataPoints = [];
var metric = <%= queries[0].results[0].name %>; //Gives me correctly a string
//il for che mi scorre tutta la risposta
for (var j = 0; j < queryLength; j++)
{
}
});
问题是浏览器中的JavaScript无法将query
的值理解为字符串。输出[1,2,3]
或{"foo":"bar"}
并不重要,JavaScript只会将其解释为var query = "[1,2,3]"
或var query = "{"foo":"bar"}"
。
正如Guffa在评论中所说:如果你想在JavaScript中获得对象,你需要确保ASP输出对象的有效JSON字符串表示,然后在JavaScript中解析它。因此,如果您的query
对象是ASP中的{foo: bar}
,则需要从ASP输出字符串"{"foo":"bar"}"
。我不知道ASP是否有任何内置的方法,但假设它有(或者你制作了一个),并且它被称为toJSONString()
:在你的JavaScript中,do:
var query = JSON.parse(<%= toJSONString(query) %>)