我将所有javascript / jquery代码放在一个文件中,并将其包含在我的页面中。没有apache进程js文件作为PHP什么是将数据从PHP传递到我的js脚本的最佳方法?现在我在我的页面上有一个隐藏的div,我回显了一个值然后使用jquery我得到文本内容然后拆分它来获取变量。这是一个很好的方式吗?或者有更好的方法吗?
更新
如前所述,我所有的js代码都在我包含在网页中的.js文件中。我可以在这种情况下使用PHP的唯一方法是告诉apache将.js文件视为php,这样就可以在.js文件中重新识别php代码。我不想这样做。
HTML
<div id="pagedata" style="display:none;">data1<>data2</div>
JS
var pagedata = $('#pagedata').text();
var break_data = pagedata.split('<>');
答案 0 :(得分:2)
为什么你不直接使用php渲染javascript(作为JSON),然后你可以在本地使用jQuery。
<script>
var data = {my: 'data', goes: 'here', <? echo render_more_of_my_data(); ?> };
</script>
编辑:
如果你不想在你的php页面中有内联js,并且不希望apache将js作为php处理,那么也许你可以src一个包含js的php文件。
<script src="my_php_file.php">
并且在php文件里面有js
var data = <? echo render_my_data(); ?>;
OR
只是jQuery使用ajax jQuery.get(“php_url.php”)调用php webservice,并再次在那个php脚本中渲染一些json。
答案 1 :(得分:0)
您可以直接将javascript填充为:
,而不是从潜水中获取数据var pagedata = '<?php echo $somevariable; ?>';
var break_data = pagedata.split('<>');
答案 2 :(得分:0)
您应该实际回应JavaScript代码,而不是误用HTML来传递数据(必须要解析)。例如,PHP可以生成:
<script type="text/javascript">
var data1 = "data1";
var data1 = "data2";
</script>
由于这是在页面的全局范围内声明的,因此您的脚本实际上可以访问这些变量。
唯一需要注意的是比赛条件。在定义数据后,您的脚本必须执行。但是,使用标准的jquery on-dom-ready回调并不是问题。
答案 3 :(得分:0)
最佳做法可能是Matt在上面的评论中提到的:使用JSON。如果您要使用jQuery,可以使用$.get()
或$.getJSON()
来调用PHP脚本。你可以在这里找到PHP JSON的手册:http://php.net/manual/en/book.json.php,以及jQuery方法$.getJSON()
的API参考:http://api.jquery.com/jQuery.getJSON/
HTH。
答案 4 :(得分:0)
HTML
<div id="pagedata" style="display:none;">
<?
$master['data1'] = 'single';
$master['data2'] = array('2a', '2b');
echo json_encode($master); ?>
</div>
json_encode应该已经在PHP 5.2中了。否则请查看此处http://www.json.org/
JS
var master = JSON.parse( $('pagedata').html() );
// master.data1; // single
// master.data2[0]; // 2a
// master.data2[1]; // 2b
要使用JSON.parse,您需要来自https://github.com/douglascrockford/JSON-js的json2.js。
答案 5 :(得分:0)
将JS变量和对象与数据结合起来是一个好主意,但另一种方法是通过内部jQuery存储来管理它们 $ .data()
对于非平凡的用户界面来说,优势显而易见:
<强> JS 强>
var pagedata = jQuery.data( document.body, '<? echo json_encode($var); ?>');
var break_data = JSON.parge(pagedata)