Я пытаюсь поделиться config.inc.php в php с javascript. Это работает, но не с ajax … всегда есть вызванная «функция ошибки». Есть ли способ поделиться конфигурационным файлом с рабочим ajax?
Я использую его в проекте Apache Cordova, с начальной загрузкой и JQuery.
Вот часть моего файла index.html:
<html>
<head>
<title></title>
<link rel="stylesheet" href="lib/bootstrap/3.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="lib/bootstrap/3.3.1/css/bootstrap-theme.min.css">
<script type="text/javascript" src="js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="lib/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="config.inc.php"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
console.log(config_url);
jQuery.ajax({
url: config_url,
type: "POST",
dataType: "json",
data: "param=no",
success: function(html){
doSomething();
});
}, error: function(e){
alert(e); //always an alert :/
}
});
});
</script>
</head>
<body></body>
</html>
Вот мой config.inc.php:
<?php
global $config;
$config["url"] = "http://192.168.1.Y/fetchdata.php";
$config["db"]["host"] = "localhost";
$config["db"]["database"] = "myDatabase";
$config["db"]["username"] = "root";
$config["db"]["password"] = "";
$config["db"]["port"] = null;
$config["db"]["socket"] = null;
?>
var config_url = <?php echo json_encode($config["url"]); ?>; //if i remove this line, ajax will work and call the "success part".
И, наконец, последний файл «fetchdata.php» для подключения к базе данных:
<?php
// Allow access via php
header('Access-Control-Allow-Origin: *');
// Load configuration
require 'config.inc.php';
global $config;
$sqlconn = mysqli_connect($config["db"]["host"], $config["db"]["username"],
$config["db"]["password"], $config["db"]["database"], $config["db"]["port"],
$config["db"]["socket"]) or die(mysqli_error());
$dataquery = mysqli_query($sqlconn, "SELECT * FROM table_profil");
$arr = array();
while($row = mysqli_fetch_object($dataquery)) {
array_push($arr, array("key" => $row->key, "value" => $row->value));
}
print_r(json_encode($arr));
?>
Я использовал XAMPP для тестирования. Выход
var config_url =
«HTTP: //192.168.1.Y/fetchdata.php»; [{ «ключ»: «размер», «значение»: «150»}, { «ключ»: «цвет», «значение»: «зеленый «}]
Без вывода » var […] .php «; » это будет работать … Но мне понравилось делиться конфигом.
вы использовали JavaScript в PHP без <script>
тег? Как так? использование
<script>
var config_url = '<?php echo json_encode($config["url"]); ?>';
</script>
вместо
var config_url = <?php echo json_encode($config["url"]); ?>;
таким образом, вы можете передать config_url с javascript, но ваш ajax не будет работать .. потому что ajax не работает через серверы, поэтому вы не можете использовать «Http: //192.168.1.Y/fetchdata.php«в вашем URL-адресе ajax .. в вашем URL-адресе ajax просто используйте url: ‘fetchdata.php’ и проверьте, что вы ссылаетесь на его путь
Спасибо, Мохамед-Юсеф и Майкл, я решил это с помощью части ваших ответов. Вы показали мне ошибку и дали подсказки для решения :).
Тед пишет решение в Совместно используемые данные JSON для php и Javascript / Ajax . Я использую «GET» -Param для поддержки JavaScript. Поскольку в моем «fetchdata.php» не будет никакого javascript, я использую его без вывода param => no javascript, если это не нужно.
Мой index.php включает в себя конфигурацию с параметром «js»; похоже …
<script type="text/javascript" src="config.inc.php?js"></script>
… и мой «config.inc.php» выглядит так
<?php
global $config;
$config["url"] = "http://192.168.1.Y/fetchdata.php";
....
if (isset($_GET["js"])) {
echo
'
var config = [];
config["url"] = "' . $config["url"] . '";
';
}
?>
Без изменений в «fetchdata.php».
Это решение работает для меня. Спасибо всем!