我正在尝试使用XmlHttpRequest从javascript文件运行php脚本。但由于某种原因,我的代码只是将PHP代码作为字符串返回,而不是实际运行它。
如果我从全局网址单独运行php,那么php运行得非常好,但它不能从javascript文件运行,这意味着我的javascript请求有问题吗?
我正在使用Apache和nodejs在Ubuntu上本地运行所有内容。我之前被引导到此链接:PHP code is not being executed, instead code shows on the page,但似乎Ubuntu没有httpd.conf文件并使用apache2.conf。我不确定它有什么区别或如何在不破坏它的情况下弄乱它。此外,上述链接是否只表示它是php的错?但是当我通过全局网址访问时,我的php文件运行得非常好。
以下是应该调用php文件的javascript片段:
function drawOutput(responseText) {
console.log(responseText);
}
function drawError(status) {
console.log('Error: ' + status);
}
// handles the response, adds the html
function getRequest(url, success, error) {
var req = false;
try{
// most browsers
req = new XMLHttpRequest();
} catch (e){
console.log("XML request failed.");
return false;
}
if (!req) return false;
if (typeof success != 'function') success = function () {};
if (typeof error!= 'function') error = function () {};
req.onreadystatechange = function(){
if(req.readyState == 4) {
return req.status === 200 ? success(req.responseText) : error(req.status);
}
}
req.open("GET", url, true);
req.send(null);
return req;
}
var urlString = '../tests/server_scripts/page_load.php' + encodeURIComponent('game_id') + '=0&' + encodeURIComponent('client_timestamp') + '=10';
//var urlString = "http://rpal.cs.cornell.edu/YH/public/tests/server_scripts/page_load.php?" + encodeURIComponent('game_id') + '=0&' + encodeURIComponent('client_timestamp') + '=10';
//var urlString = 'http://localhost/YH/WebHanabi/public/tests/server_scripts/page_load.php&' + encodeURIComponent('game_id') + '=0&' + encodeURIComponent('client_timestamp') + '=10';
console.log(urlString);
var urlRequest = getRequest(
urlString, // URL for the PHP file
drawOutput, // handle successful request
drawError // handle error
);
编辑: 这是我的HTML:
<!DOCTYPE html>
<html>
<head>
<title>Hanabi Lobby</title>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<script src="/js/classList.js"></script>
<script src="/js/socket.io.js"></script>
<script src="/js/bokeh.js"></script>
<script src="/js/lobby.js"></script>
</head>
<body>
<div id="header">Hanabi Lobby<hr></div>
<div id="body">
<div id="info-row">
<ul>
<li><span class="info-title">Name:</span><span class="editable" title="Click to edit"><span class="name editable-text">My Name</span><i class="fa fa-edit edit"></i></span></li>
<li><span class="info-title">Room:</span><span class="room">My Room</span></li>
</ul>
</div>
<div id="content">
<div class="column">
<div class="column-title">Rooms</div>
<div class="column-container rooms">
<ul class="room-list">
<li class="joinable" x-room="room 1">room 1</li>
<li class="joinable" x-room="room 2">room 2</li>
<li class="selected-room" x-room="room 3">room 3</li>
<li class="joinable" x-room="room 4">room 4</li>
</ul>
<ul class="bottom-buttons">
<li id="new-room-button"><i class="fa fa-plus-circle" style="position: absolute; left: 10px; bottom: 5px;"></i> New Room</li>
</ul>
</div>
</div>
<div class="column">
<div class="column-title">Participants</div>
<div class="column-container participants">
<ul class="clients-list">
<li class="ready">person 1</li>
<li class="not-ready">person 2</li>
<li class="ready">person 4</li>
</ul>
<ul class="bottom-buttons">
<li id="ready-button"><i class="icon fa fa-play-circle" style="position: absolute; left: 10px; bottom: 5px;"></i><span class="text">Ready</span></li>
</ul>
</div>
</div>
</div>
</div>
<div id="footer">Sweet game bro!</div>
</body>
</html>
这是我试图从javascript运行的PHP文件:
<?php
header('Access-Control-Allow-Origin: *');
include("connection.php");
//specific
if(!isset($_GET["game_id"]) || !isset($_GET["client_timestamp"])){
print(json_encode(array("error_code" => "1", "message" => "missing game_id or client_timestamp")));
return;
}
$game_id = $_GET["game_id"];
$client_timestamp = $_GET["client_timestamp"];
if(!is_numeric($game_id) || !is_numeric($client_timestamp)){
print(json_encode(array("error_code" => "2", "message" => "game_id or client_timestamp malformed, integers only")));
return;
}
// jsonp
$jsonp = false;
if (isset($_GET["callback"])) {
$jsonp = true;
$jsonp_methodname = $_GET["callback"];
}
//insert new id
$user_id = isset($_GET["user_id"]) ? $_GET["user_id"] : generateRandomString(40);
if(!isset($_GET["user_id"])){
$st1 = $mysqli->prepare("INSERT INTO users (user_id, user_info) VALUES (?, ?)");
$user_info = isset($_GET["user_info"]) ? $_GET["user_info"] : "";
$st1->bind_param("ss", $user_id, $user_info);
$st1->execute();
}
$st = $mysqli->prepare("INSERT INTO player_pageload_log (user_id, server_timestamp, game_id, version_id, session_id, client_timestamp, host_domain, referrer_host, referrer_path) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
$server_timestamp = time();
$version_id = isset($_GET["version_id"]) ? $_GET["version_id"] : 1;
$session_id = isset($_GET["session_id"]) ? $_GET["session_id"] : generateRandomString(36);
$host_domain = $_SERVER["HTTP_HOST"];
$referrer_host = $_SERVER["HTTP_USER_AGENT"];
$referrer_ip = $_SERVER["REMOTE_ADDR"];
$st->bind_param('siiisisss', $user_id, $server_timestamp, $game_id, $version_id, $session_id, $client_timestamp, $host_domain, $referrer_host, $referrer_ip);
$st->execute();
// Return response as either json or jsonp if method wrapper (as GET param 'callback') was specified.
$json_response = json_encode(array("error_code" => "0", "message" => "success", "user_id" => $user_id, "session_id" => $session_id));
if ($jsonp) {
print($jsonp_methodname . '(' . $json_response . ');');
}
else {
print($json_response);
}
?>
答案 0 :(得分:0)
我认为javascript文件在本地运行?
然后问题是因为PHP需要先运行apache和PHP引擎才能显示它。你的代码实际上做的是进入后端,打开一个扩展名为.php的文件并读取该文件。请尝试使用URL。而不是使用绝对文件路径。