我有一个3层架构。 db是oracle,业务/逻辑层是php,而前端是html / JavaScript。我的业务/逻辑层有一堆单元测试,只有满足要求才能通过。当我通过javascript连接业务层和前端时,会出现问题。经过大量调试后,我找到了问题的根源:
JavaScript代码导致错误。
function getAllUsers() {
var allUsers = [];
$.ajax ({
url: '../php/get-all-users.php',
success:function(data){
allUsersJSON = JSON.parse(data);
console.log(allUsersJSON);
for (var i = 0; i < allUsersJSON.length; i++){
allUsers[i] = allUsersJSON[i].USER_NAME;
}
console.log(allUsers);
}
});
return allUsers;
}
../的PHP / GET-全users.php
<?php
include_once 'Database.php'
$db = Database::instance(); // Singleton to initialize db.
echo json_encode($db->getAllUsers());
?>
Database.php 片段。
public function createConnection($username, $password, $connectionString){
$this->_connection = oci_connect($username, $password, $connectionString);
if (!$this->_connection) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
throw new Exception("Database connection failed. Please check constructor arguments.");
}else{
//print "Database connection established.\n";
}
}
在我的一项测试中,我尝试了 echo json_encode($ db-&gt; getAllUsers()); 并获得了一个结果“[\”“USER_NAME \”:\“userName \ “]”即可。在get-all-users.php中,如果我注释掉所有内容,并回显我从测试中获得的字符串,那么网页现在可以正常加载,但当然这不是我想要的。此外,如果我在get-all-users.php中取消注释 include_once'Database.php'并在我的Database.php中注释掉 oci_connect ,则网页加载正常。这使我得出结论,问题的根源是oci_connect。
有没有其他人有类似的经历?我试过谷歌搜索但没有找到结果。如果您需要更多信息来解决这个问题,我很乐意将它们吐出来。
编辑:
我在linux上工作。我的队友正在使用Windows,他没有这样的问题。