我应该使用<script>标签将数据从PHP传递到JavaScript吗?

时间:2016-11-02 09:48:42

标签: javascript json script-tag

“如何将变量和数据从PHP传递到JavaScript?”的已接受答案列出了许多方法。在“如何从JavaScript中读取脚本标记中的JSON”中讨论了未明确提及的内容(尽管它适用于方法2) ?“。它的工作原理是使用PHP函数(复制自 Mathias Bynens

&#xA;&#xA;
  json_encode($ data,JSON_HEX_TAG | JSON_UNESCAPED_SLASHES)&#xA;  
&#xA;&#xA;

编写标签的内容,例如

&#xA;&#xA;
 &lt; script id =“data”type =“application / json”&gt; {org:10,items:[“一个“,”两个“]}&lt; / script&gt;&#xA;  
&#xA;&#xA;

(从 c-smile )的答案,然后是通过JavaScript读取DOM。

&#xA;&#xA;

这似乎是我的最佳方法(我宁愿不做单独的AJAX调用),但我有点担心它似乎不是做这些事情的标准方式。是否存在我应该注意的潜在安全问题?

&#xA;&#xA;

这可能是合理的未来证据吗?是否有可能会对&lt; script&gt; 标记或浏览器处理 type =“application / json”的方式进行更改,从而破坏这种方法?

&#xA;&#xA;
&#xA;&#xA;

更新

&#xA;&#xA;

以下是一个示例方法:

&#xA;&#xA;
 &lt; html&gt;&#xA;&lt; head&gt;&#xA;&lt; script id =“data”type =“application / json“&gt;&#xA;&lt;?php&#xA; $ data = array(&#xA;”org“=&gt; 10,&#xA;”items“=&gt;数组(”one“, “两个”),&#xA;“反斜杠”=&gt;“\\”,&#xA;“斜杠”=&gt;“/”,&#xA;“单引号”=&gt;“'”,& #xA;“double quote”=&gt;“\”“,&#xA;”关闭标记“=&gt;”&lt; / script&gt;“&#xA;);&#xA; echo json_encode($ data,JSON_HEX_TAG );&#xA;?&gt;&#xA;&lt; / script&gt;&#xA;&lt; / head&gt;&#xA;&lt; body&gt;&#xA;&lt; script&gt;&#xA; var data = JSON.parse(document.getElementById(“data”)。innerHTML);&#xA;&#xA; for(数据中的var键){&#xA; if(data.hasOwnProperty(key)){&#xA; var p = document.createElement(“pre”);&#xA; document.getElementsByTagName( “正文”)[0] .appendChild(P);&#XA; p.appendChild(document.createTextNode(数据[键]的ToString()));&#XA; }&#XA;}&#XA;&LT; /脚本&GT;&#XA;&LT; / BODY&GT;&#XA;&LT; / HTML&GT;&#XA;  
&#XA; { {66}} {{11}} 40376813 {{22}} {{33}} 一段时间后MySQL连接超时(Python,MySQL,FLASK) {{44}} {{55}}

我目前正在uWGI的帮助下运行在NGINX服务器上运行的烧瓶python应用程序。静态页面始终可访问,但使用连接(MySQL)的页面在2分钟后超时。这是怎么回事?它们变得简单无法使用。

&#xA;&#xA;

我尝试过的事情:

&#xA;&#xA;
    &#xA;
  • 不使用全局
  • &#xA;
  • 使用池
  • &#xA;
  • 关闭防火墙
  • &#xA;
&#xA;&#xA;

&#xA;&#xA;
 #using python version 2.7.10&#xA; from flask import Flask,jsonify,request,session&#xA; import mysql.connector.pooling&#xA;&# xA;#与DB&#xA;&#xA; dbconfig = {&#xA;建立连接“主持人”:“12.34.5.78”,&#xA; “database”:“db”,&#xA; “user”:“user”,&#xA; “password”:“pass”&#xA;}&#xA;&#xA; conn = mysql.connector.connect(pool_name =“mypool”,&#xA; pool_size = 6,&#xA; ** dbconfig) &#xA;&#xA; #Define root&#xA; app = Flask(__ name __)&#xA;&#xA; #Landings page&#xA; @ app.route('/')&#xA; def index ():&#XA;返回“Hello World。”&#xA;&#xA;#按名称返回所有资源&#xA; @ app.route('/ resources',methods = ['GET'])&#xA; def allResourceNames(): &#XA; conn1 = mysql.connector.connect(pool_name =“mypool”)&#xA; reader = conn1.cursor()&#xA; query =(“SELECT name FROM resources”)&#xA; reader.execute(查询)&#XA; resources = []&#xA;读者名字:&#xA; resources.append({'name':name [0]})&#xA; reader.close()&#XA; conn1.close()&#XA; return jsonify({“resources”:resources})&#xA;&#xA; if __name__ ==“__ main __”:&#xA; app.run(调试=真)&#XA;  
&#XA;

1 个答案:

答案 0 :(得分:0)

您可以使用变量:

在你的php中:

<?php
$data = array(
    "org" => 10,
    "items" => array("one", "two"),
    "backslash" => "\\",
    "slash" => "/",
    "single quote" => "'",
    "double quote" => "\"",
    "close tag" => "</script>"
);
?>

你的html:

<script>
    var data = <?php echo json_encode($data); ?>
</script>

你可以用:

给你打电话
JSON.parse(data);