如何从 Javascript 调用 PHP 文件并将数据从 PHP 返回到 Javascript

Posted

技术标签:

【中文标题】如何从 Javascript 调用 PHP 文件并将数据从 PHP 返回到 Javascript【英文标题】:How to call PHP file from Javascript and return data from PHP back to Javascript 【发布时间】:2017-04-20 04:24:30 【问题描述】:

我正在寻找最安全的方法来从 javascript 调用 php 文件,然后将数据从 PHP 返回到 Javascript。

我正在开发 Javascript 游戏。我需要调用 PHP 文件来连接数据库并从数据库中选择一些数据。此数据应传递给 Javascript。

我在这里查看了 Chris Baker 的答案:Call php function from javascript

javascript

 // handles the click event for link 1, sends the query
 function getOutput() 
   getRequest(
       'myAjax.php', // URL for the PHP file
        drawOutput,  // handle successful request
        drawError    // handle error
   );
   return false;
   
 // handles drawing an error message
 function drawError() 
     var container = document.getElementById('output');
     container.innerhtml = 'Bummer: there was an error!';
 
 // handles the response, adds the html
 function drawOutput(responseText) 
     var container = document.getElementById('output');
     container.innerHTML = responseText;
 
 // helper function for cross-browser request object
 function getRequest(url, success, error) 
     var req = false;
     try
         // most browsers
         req = new XMLHttpRequest();
      catch (e)
         // IE
         try
             req = new ActiveXObject("Msxml2.XMLHTTP");
          catch(e) 
             // try an older version
             try
                 req = new ActiveXObject("Microsoft.XMLHTTP");
              catch(e) 
                 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;
 

HTML

 <a href="#" onclick="return getOutput();"> test </a>
 <div id="output">waiting for action</div>

PHP

 // file myAjax.php
 <?php
   echo 'hello world!';
 ?>

但我需要检索总共 4 个变量:1 个问题和 3 个答案,根据 Chris 的回答它只获取 1 个回声。

我的 PHP 文件是这样的:

//some code
$questions->bind_result($question, $answer1, $answer2, $answer3);

while ($questions->fetch()) 
    echo $question;  
    echo $answer1;
    echo $answer2;
    echo $answer3;

我的 HTML + Javascript 文件:

<div class="question-area">

</div>
<div class="answers">
     <input type="button" class="btn" value="return getSuccessOutput();">   

     <input type="button" class="btn" value="return getSuccessOutput();">   

     <input type="button" class="btn" value="return getSuccessOutput();">   
     <span id="output" class="output"></span>
</div>

我需要将$question 变量传递给.question-area$answer1$answer2$answer3 到按钮的值。你能帮我实现它吗?

更新

这是我的connect.php,当我尝试刷新 www.mywebsite/connect.php 时,它大多数时候什么都不返回(空白页),刷新 ~10 次后它会选择随机数据。它有什么问题? SQL 查询似乎不错,在 phpMyAdmin 中工作正常。

$questions = $con->prepare("
    SELECT Question, Answer1, Answer2, Answer3
    FROM Questions AS q
    ORDER BY RAND()
    LIMIT 1
"); 
$questions->execute();

$questions->bind_result($question, $answer1, $answer2, $answer3);

while ($questions->fetch()) 
    $qa = array('question' => $question, 'a1' => $answer1, 'a2' => $answer2, 'a3' => $answer3);
    echo json_encode($qa);

如果我在 while 循环中传递var_dump($qa); 它总是返回数据。 echo json_encode($qa)有问题

【问题讨论】:

你应该发送一个 JSON 对象。 “安全”是什么意思? @SLaks 我已经更新了我的问题。 PHP文件有问题,而我正在使用json_encode($qa)。你有什么想法吗? 您必须发出单个 JSON 对象;你不能连接 JSON。你可能想要一个数组。 @SLaks 在我的 PHP 文件中 $qa 是包含 1 个问题和 3 个答案的数组。我正在尝试刷新我的 connect.php 文件,有时它返回数组,有时它什么也不返回。 【参考方案1】:

将您的数据放入一个数组并回显 json。

$qa = array('question' => $question, 'a1' => $answer1, 'a2' => $answer2, 'a3' => $answer3);
echo json_encode($qa);

现在在您的 JS 中,您将可以访问具有相同键的对象。

【讨论】:

谢谢你的回答,我现在如何通过JS访问它?我正在尝试这样document.btn1.innerHTML = a1;,但出现错误:Uncaught ReferenceError: a1 is not defined @Infinity:这为您提供了一个具有属性的对象。您需要使用这些属性(您还需要解析 JSON)。使用您的调试器查看您的 Javascript 有什么。 @SLaks 我尝试使用var test = JSON.parse(qa); document.btn1.innerHTML = test;,但在这种情况下我得到了一个错误:(index):10 Uncaught ReferenceError: qa is not defined。如果我使用var test = JSON.parse(a1); document.btn1.innerHTML = test;,我会收到一个错误:Uncaught ReferenceError: a1 is not defined。解析 JSON 有什么问题? @Infinity 你在用 Jquer 吗?如果你是,那么你可以简化很多这样的代码。如果没有,请删除标签。一旦你让我知道我可以使用什么,我会更新我的答案。 @Infinity:那你应该打电话给$.getJSON()

以上是关于如何从 Javascript 调用 PHP 文件并将数据从 PHP 返回到 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript ajax 调用中从 PHP passthru 获取二进制数据?

如何创建值数组并从 PHP 调用 JavaScript 函数

如何在 JavaScript 函数中激活 PHP 文件

如何使用 htaccess 使某些 javascript 文件从 php 呈现

使用ajax调用从javascript保存txt文件到PHP

如何从 JavaScript 调用 ASHX?