API调用后使用javascript更改php变量

API调用后使用javascript更改php变量,javascript,php,Javascript,Php,我最近有点纠结。我有一段javascript代码调用API,然后根据API响应收集数据库数据。我是这样做的: <?php $class = MyClass(); ?> <div id="display"></div> <span id="foo"></span> <script type="text/javascript"> var p = document.getElementById("foo"); p.o

我最近有点纠结。我有一段javascript代码调用API,然后根据API响应收集数据库数据。我是这样做的:

<?php
    $class = MyClass();
?>

<div id="display"></div>
<span id="foo"></span>

<script type="text/javascript">
var p = document.getElementById("foo");

p.onclick = function() {
    // API Call
    $.post("CallAPI.php", {
        parameter1: someValue,
        parameter2: someOtherValue,
    }).done(function (data) {
        json = JSON.parse(data);
        response = json.node.subNode.field;
        // Database Fetch
        $.post("fetchDataFromDB.php", {
            parameter: response,
        }).done(function (data) {
            // what do I do ?
        });
    });
};
</script>

我正在寻找的是一种修改
$\u变量的方法,方法是影响数据库获取返回的值,然后在显示器中显示
$\u变量的值

,这是不可能的,因为PHP的工作方式。一个PHP脚本被加载到解释器中,被删除,然后被卸载。以下解释并非100%准确,但可能有助于您更好地理解:

  • 您可以使用JS调用
    CallAPI.php
    • CallAPI.php
      很神奇,返回可能的输出,脚本停止
  • JS捕获输出,并调用
    fetchDataFromDB.php
    • 此时,
      CallAPI.php
      中存在的每个值都不再存在了
    • fetchDataFromDB.php
      很神奇,返回可能的输出,脚本停止
当您开始编码时,这对graps来说是一个令人困惑的概念,但PHP是Syncronic(首先是a,然后是B,然后是C,然后是done),javascript是异步的(ABC没有给定的顺序,有些可能会立即启动,有些则等待首先发生的事情,比如单击)

要理解您想要什么有点困难,因为您的变量名不好(
parameter1
根本不是描述性的),所以我无法给您更准确的答案。
在您在问题中指定的情况下,如果您不使用javascript中的值,那么第一个php脚本可能直接调用第二个php脚本。速度也快了很多


如果您遇到了所描述的情况,由于*原因*需要在javascript中生成结果,则可以将值存储在会话变量或数据库中。

我建议使用变量调用php文件(从AJAX调用接收的输出)作为查询字符串参数,然后在php上获取这些参数。您可以使用会话变量在脚本之间保存数据。变量名称不是我关心的问题,我还不如将其删除。不管怎样,我明白你的意思了,到时候我会想些别的。@Barmar:我已经把它添加到我的答案中了。我意识到我跳过了一些东西。如果javascript发生在单击上,会有什么变化吗?(编辑后)
class myClass
{
    private $_variable;

    public function __construct(){
        $this->_variable = 'init';
    }

    public getVariable(){
        return $this->_variable;
    }

    public setVariable($variable){
        $this->_variable = $variable;
    }
}