2014-01-16 60 views
0

令人惊讶的是,我发现这个主题几乎没有任何东西,但我认为这是一个非常简单的解决方案。在括号内打印javascript变量

问题描述:

我有填充有PHP变量JavaScript变量:

var createdEncode = '<?php echo $createdEncode; ?>';

的PHP包含JSON串但没有起始和结束花括号。我检查了定界符的问题,但该字符串是罚款我是怎么想的,看到自己:

var createdEncode = '"sEcho":1,"iTotalRecords":15,"iTotalDisplayRecords":11,"aaData":[["1","Suche Kurier","","dauerhaft, immer","","","ein geschenk","3","test dauerhaft","0","1","1","",""],["4","Suche Hilfe","1","bis 09.01.2014, sdfkdsjf","","","Du gibst: 9\u20ac","1","Auch gibt es niemanden, der den Schmerz an sich liebt, sucht ...","1","1","0","",""],["5","Suche Kurier","","bis 15.01.2014, jklkl","","","Du gibst: 8\u20ac","1","jllk","1","1","0","",""],["7","Suche Kurier","","bis 20.01.2014, jkljkl","","","Du gibst: 8\u20ac","1","nm,.","0","1","0","",""],["8","Suche Hilfe","1","am 25.01.2014 um 08:45 Uhr","","","Du gibst: 8\u20ac\/h","2","dsdf","0","1","0","",""],["9","Biete Kurier","","bis 08.01.2014, swrslkjk","","","kljkjl","3","Auto Kompaktklasse, H\u00e4lfte des Kofferraums freier Platz","1","1","0","2","4"],["10","Biete Hilfe","1","am 26.01.2014 um 12:45 Uhr","","","Du bekommst: 6\u20ac","1","sdsdfs","0","1","0","",""],["11","Suche Kurier","","bis 23.01.2014, sfui","","","Du gibst: 7\u20ac","1","jlkkjl","0","1","0","",""],["12","Suche Hilfe","1","am 15.01.2014 um 13:00 Uhr","","","Du gibst: 8\u20ac\/h","2","sdfkl","1","1","0","",""],["13","Biete Kurier","","bis 29.01.2014, erert","","","Du bekommst: 4\u20ac\/h","2","Zu Fu\u00df, Dreiviertel des Kofferraums freier Platz","0","1","0","0","5"],["14","Biete Hilfe","1","dauerhaft, dfgdf","","","Du bekommst: 3\u20ac\/h","2","xfsfds\u00f6k","0","1","0","",""]],"oLanguage":{"sUrl":"language\/dataTables.german.txt"}'; 

后来我得到了一些JS它说:

$('#postsCreatedData').dataTable({ 
    createdEncode, 
    "bAutoWidth": false, 
    "aoColumnDefs":[ 
     {"aTargets .... stuff ... 

我的问题是,“createdEncode”不没有,控制台抛出Uncaught SyntaxError: Unexpected token ,。 Meant是“createdEncode”后面的逗号。

我的方法:

document.write(createdEncode);它抛出unexpected token .尝试过。 也试过+ createdEncode +。同样的事情在这里,意想不到的+ ... 我真的不知道该怎么做。你能否提供一个解决方案将该变量的内容打印到该数据表中?

非常感谢。

解决方案:

由于JavaScript需要一个合适的对象,而不是预期的我不得不重写整个数据表工作的字符串() - 调用。感谢MueR让我走上正轨。

基本上,我将打印的PHP变量转换为标准的JSON对象,并将其作为JSON对象设置为变量的其他选项进行了扩展。

我所做的一切则是:

var createdParams = $.extend({}, createdEncode, appendix);该插头的“附录” -JSON到createdEncode,因此呼叫现在的工作:

$('#postsCreatedData').dataTable(createdParams);

+2

什么的* *生成的JavaScript看起来像?这是给你错误的代码。在尝试修复产生它的代码之前,找出你想要产生的东西! – Quentin

+0

很难回答这个问题,因为尽管你已经解释了,但是我们根本不知道客户端的输出是什么,而没有亲自看到它。您可以从客户端查看网页的源代码,然后将JavaScript中显示的内容完全添加到您的问题中,作为PHP分析的代码行的输出:var createdEncode ='<?php echo createdEncode; ?>';' –

+0

好吧,我用完整的字符串更新了我的问题:) – Karl

回答

1

您的问题是你将一个字符串(不带键)放入该对象中,这是无效的。 你得到的JavaScript是

{ 
    "a string without index, which is illegal", 
    "bAutoWidth": false, 
     "aoColumnDefs":[] 
} 

做是正确,你需要有PHP还包括支架,而不是周围的单引号,所以这是一个实际的对象。然后,你将不得不在createdEncodebAutoWidth

你可以试试这个其他的对象合并(假设你让PHP输出一个实际的JavaScript对象)

var dataTableParams = $.extend({}, createdEncode, {"bAutoWidth": false, .. other things ..}); 
+0

我必须不同意括号。我需要没有括号的字符串,否则会破坏代码。您可以看到该字符串中的每个条目都以逗号分隔。我基本上添加bAutoWidth和aoColumnDefs与该逗号获取有效的对象可用于dataTable()。 – Karl

+1

问题是,你没有创建一个有效的对象。在JS对象中,每个条目都必须是键值对。你正在添加一个没有密钥的字符串,这是无效的。 Javascript不解析该变量的内容,即使它会,它只会看到一个字符串。你必须将它转换为一个对象并合并它们,或者添加一个键(在这一点上,你传递的对象将是有效的,但PHP生成的部分仍然只是一个字符串)。 你想做什么不能完成,这不是JS的工作方式。 – MueR

+0

我想我理解你并会尝试你的方法,因为它比我的更清洁。但令人困惑的是,我以前有行“echo $ createdEncode;”而不是createdEncode在那里,它的工作。所以基本上用PHP打印时,Javascript只能看到一个字符串,它违背了你的想法,即javascript“只会看到一个字符串”并停止。 – Karl