为了不重复代码,人们如何建议在PHP和JavaScript之间共享常量文件? XML文件?我假设在PHP中混合javascipt不是正确的解决方案!?谢谢
答案 0 :(得分:4)
http://php.net/manual/en/book.json.php
我会说使用json。它是javascript的原生,并且有一个php的解析器库。
考虑以下事项:
JSON:
{constants : { var1 : "value 1", var2 : "value 2", var3 : "value 3"}}
然后将其读入php:
$const = json_decode(json_string);
这为您提供了对象$ const,其中包含$ const-> {'var1'}等属性,返回“value 1”。
在JavaScript中这将是:
var const = eval(json_string);
并且会给你const.constants.var1 ==“value 1”。
js实际上最简单的实现是:
<script type="text/javascript" src="json_constants_file.js"></script>
当添加html输出时,你立即拥有一个常量对象,其他对象作为其子对象。
答案 1 :(得分:0)
PHP和JavaScript共享的配置变量可以很容易地存储为XML,是的。但是,JSON可能是一个更好的解决方案,因为它需要很少的解析工作 - JS本地处理它,而PHP将其转换为json_decode
的数组。
答案 2 :(得分:0)
您可以尝试我的方法。我创建了一个用于php和js文件的公共配置文件。
看看这个技巧:
PHP类配置文件:
<?php
/** Class Start **/
class Config {
/********************************/
/* Page Config Info */
/********************************/
// page title
const PAGE_TITLE = 'Welcome in Code Era!';
// base url
const BASE_URL = 'http://www.myapp.com/';
/********************************/
/* Database Config Info */
/********************************/
// mysql host server
const SERVER = '10.102.23.141';
// database user name
const USER = 'root';
// database password
const PASSWORD = '';
// mysql database name
const DATABASE = 'sample';
/********************************/
/* Share Message */
/********************************/
// Facebook Share Message
const FB_SHARE_MESSAGE = 'This gonna my share message';
// Facebook Share Title
const FB_SHARE_TITLE = 'This gonna my share title';
// Facebook Share Caption
const FB_SHARE_CAPTION = 'This gonna my share caption';
}
/** Class End **/
?>
JavaScript文件:
// global config var
var config = {} || '' || null;
/**
* Get Config data with Ajax Response Data
* custom ajax method
* return ajax response and use/store as javascript var
* extend jQuery Ajax and change it
* @param qs -> query string {q:value}
* @returns result mix|multitype
*/
$.extend({
getConfig : function (qs) {
var result = null;
$.ajax({
url : 'GetConfig.php',
type : 'POST',
data : qs,
dataType : "json",
async : false,
success : function (data) {
result = data;
},
error : function ajaxError(jqXHR, exception) {
if (jqXHR.status === 0) {
alert('Not connected.\nVerify your network.');
} else if (jqXHR.status === 404) {
alert('The requested page not found. [404]');
} else if (jqXHR.status === 500) {
alert('Internal Server Error [500].');
} else if (exception === 'parsererror') {
alert('Requested JSON parse failed.');
} else if (exception === 'timeout') {
alert('Time out error.');
} else if (exception === 'abort') {
alert('Ajax request aborted.');
} else {
alert('Uncaught Error.\n' + jqXHR.responseText);
}
}
});
return result;
}
});
// Collect all Class Constant data on page load
var CONFIG = (function() {
var private = $.getConfig({config_item : ''});
return {
get: function(name) { return private.data[name]; }
};
})();
/**
* Facebook Share Content example code
* with using class constant
*/
function fbShare() {
var feed = {
method : 'feed',
link : CONFIG.get('BASE_URL'),
name : CONFIG.get('FB_SHARE_TITLE'),
caption : CONFIG.get('FB_SHARE_CAPTION')
};
function callback(response) {
if (response && response.post_id !== undefined) {
alert('Thank you for sharing the content.');
}
}
FB.ui(feed, callback);
}
如何在JavaScript中使用
var fbShareMessage = CONFIG.get('FB_SHARE_MESSAGE');
没有CONFIG.get功能示例:
var fbShareMessage = $.getConfig({config_item : 'FB_SHARE_MESSAGE'}).data;
GetConfig.php的PHP代码文件:
<?php
/**
* Get Config php file
* request a config item from javascript/ajax
* return json data
*/
// check request with ajax only
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
exit;
}
// include class config
require_once '../class/class.config.php';
// get all constant from class config
$configConstant = new ReflectionClass('Config');
// store as array in var
$configConstantArray = ($configConstant->getConstants());
// safe and private request item
$black_list_constant = 'SERVER|USER|PASSWORD|DATABASE';
$black_list_object = explode('|',$black_list_constant);
// make return jason format
$result = array();
// get action from ajax
$action = $_POST['config_item'];
switch ($action) {
case '':
$result["status"]= TRUE;
foreach ($black_list_object as $index => $value){
if(array_key_exists($value, $configConstantArray)){
unset($configConstantArray["$value"]);
}
}
$result["data"]= $configConstantArray;
$result["msg"]= 'Response 200 OK';
echo json_encode($result);
break;
default:
// check valid action
if(array_key_exists($action,$configConstantArray) && in_array($action,$black_list_object)){
$result["status"]= FALSE;
$result["data"]= null;
$result["msg"]= 'Response 201 FAIL';
echo json_encode($result);
}else{
$result["status"]= TRUE;
$result["data"]= $configConstantArray["$action"];
$result["msg"]= 'Response 200 OK';
echo json_encode($result);
}
break;
}
就是这样。希望,它会对某人有所帮助:)。