簡體   English   中英

使用AJAX從Node.js調用PHP文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM