[英]Calling PHP File from Node.js with AJAX?
您好,我目前有一個網站,上面有一個運行着node.js的游戲。 它包括gulp和socket.io。
我有一個要從node.js調用的php文件,它返回成功消息(文件中回顯),但是不更新我的數據庫。
但是,當我通過將鏈接放在瀏覽器中或從我的網站使用相同的AJAX命令調用該php文件時,它的工作原理非常好。
因此,從我的網站:site.com,該php文件運行正常,但是從我的節點服務器:site.com:3000,它返回成功,但未更新我的數據庫。
我知道Node與php不兼容,但是也許有解決方法。
我還注意到從節點調用文件時,變量為空。
這是我的php文件:
減去5.php
<?php
header('Access-Control-Allow-Origin: http://cashballz.net:3000', false);
include 'mysql.php';
session_start();
$cash_amount = $_SESSION['cash_amount'];
$userid = $_SESSION['id'];
$_SESSION['cash_amount'] -= 0.05;
$mysql = new Mysql();
$result = $mysql->setCashAmount($cash_amount,$userid);
if($result)
{
echo "5 cents have been subtracted!";
}
else
{
session_start();
session_unset();
session_destroy();
}
?>
mysql.php
<?php
class Mysql
{
protected $dsn;
protected $username;
protected $password;
public $db;
function __construct()
{
//change this to your info (myDBname, myName, myPass)
$this->dns= 'mysql:dbname=cashball_accounts;host=localhost;charset=utf8';
$this->username= 'cashball_root';
$this->password= '1VeryBright*';
$this->db = new PDO($this->dns, $this->username, $this->password);
}
public function setCashAmount($cash_amount, $id)
{
$sql = "UPDATE users SET cash_amount = :cash_amount - 0.05 WHERE id = :id";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':cash_amount', $cash_amount, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$result = $stmt->execute();
return $result;
}
}
?>
還有我的AJAX調用:(app.js)
//cut 5 cents from account - php function
$.ajax({
type: "POST",
url: 'http://cashballz.net/game/5game/subtract5.php',
data: {},
success: function (data) {
alert(data);
}
});
我需要一種方法來正確運行我的php腳本並直接從node.js更新我的數據庫。 我已經在github上看到了文件解決方案,但是我不知道這是正確的解決方案還是如何在我的代碼中實現它們。 也許有一種方法可以在后台使用Ajax通過不同的域來調用php文件?
我是PHP的初學者,並且在JS方面不錯,所以請添加詳細信息。
謝謝你的幫助!
所以我想知道
$result = $stmt->execute();
從Node調用時,sql語句將是什么? 您可以調試嗎(從Node調用時)
我的猜測是
$_SESSION
從Node調用時為空
正如您在評論中指出的那樣, $_SESSION
變量為空。 假設您在node.js中擁有相同的數據(id和現金量),則可以將其與AJAX調用一起傳遞,如下所示:
//cut 5 cents from account - php function
$.ajax({
type: "POST",
url: 'http://cashballz.net/game/5game/subtract5.php',
data: {
'id' : 'someid_probablyasint',
'cash_amount' : 'someamount_probablyasint'
},
success: function (data) {
alert(data);
}
});
然后,您可以訪問php文件中通過$_POST
傳遞的變量-由於type: "POST"
。 遵循以下原則:
<?php
header('Access-Control-Allow-Origin: http://cashballz.net:3000', false);
include 'mysql.php';
$cash_amount = $_POST['cash_amount'];
$userid = $_POST['id'];
$new_cash_amount = $cash_amount - 0.05;
$mysql = new Mysql();
$result = $mysql->setCashAmount($cash_amount, $userid);
if ($result) {
echo json_encode([
'new_cash_amount' => $new_cash_amount,
'message' => '5 cents have been subtracted!'
]);
} else {
echo json_encode(['error' => 'Huge error.']);
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.