【问题标题】:Passing variables in a URL of a php page to JavaScript and to another PHP将 php 页面的 URL 中的变量传递给 JavaScript 和另一个 PHP
【发布时间】:2015-06-02 21:05:50
【问题描述】:

基于此链接http://webaudiodemos.appspot.com/AudioRecorder/index.html 中的代码,我正在更改以通过 URL 传递 sessionId 将录制的音频文件发送到服务器。 php页面是http://xxxxx/abc.php?sessionId=Sam。 PHP 版本:PHP 5.4 PHP 5.5.22。我正在使用此链接中的第二种方法:How to pass variables and data from PHP to JavaScript?。 abc.php 页面引用了一些 JS 代码,就像上面链接中的 index.html 一样。 abc.php 页面使用以下代码正确处理 URL 值:

  <div id="bottom">
        <?php
            $faid = $_GET["sessionId"];
            echo htmlspecialchars($faid);     // tested working
        ?>
  </div>

在 recorder.js JavaScript 上,我有一个函数在将音频文件上传到服务器时尝试将 URL 值传递给另一个 PHP - fname 没有被传递......似乎.. xhr 可以。 send(blob) 仍然会发送 fname?

  Recorder.setupDownload = function(blob){
    var div = document.getElementById("bottom"); 
    var fname = div.textContent;                 

  var xhr = new XMLHttpRequest();
  xhr.open('POST', "./uploads.php?" + fname, true); 
  xhr.onload = function(e) {};
  // Listen to the upload progress.
  var progressBar = document.querySelector('progress');
  xhr.upload.onprogress = function(e) {
    if (e.lengthComputable) {
      progressBar.value = (e.loaded / e.total) * 100;
      progressBar.textContent = progressBar.value; // Fallback for unsupported browsers.
    }
  };

  xhr.send(blob); 

服务器中的 uploads.php 具有以下脚本来接收值并创建音频文件 - 但它不是创建音频文件 - 但是,如果我修复文件名(例如:“filename123”)它写入音频文件 - 所以问题在于传递变量名 - 我是新手,我想知道我错过了什么?:

    <?php
        ini_set("display_errors", true);
        error_reporting(E_ALL); 

    if(isset($_GET['fileId']) && !empty($_GET['fileId'])){
     $id = $_GET["fileId"];
    } 
        $fp = fopen( $id, 'wb' );   // writes the audio file 
        fwrite( $fp, $GLOBALS['HTTP_RAW_POST_DATA'] );   
        fclose( $fp );
    ?>

更新:它正在工作!

【问题讨论】:

    标签: javascript php html post xmlhttprequest


    【解决方案1】:

    您没有为您的值命名,因此您传递的值将在每个页面中显示为 DIFFERENT 键。

    例如您的每个用户都会有类似的东西

    http://example.com?foo
    http://example.com?bar
    

    在 PHP 中导致 $_GET['foo']$_GET['bar']。但是由于 foo/bar 是代表您的会话 ID 的一些随机值,因此您不知道该值是什么。所以...给它一个名字:

    http://example.com?key=foo
    

    现在您只需执行$key = $_GET['key'] 并始终可以访问您的会话值,无论它实际上是什么值 - 它始终会分配给key

    【讨论】:

    • Marc,我将 URL 中的“sessionId”分配给了值“Sam”-xxxxx/abc.php?sessionId=Sam。我错过了什么吗?
    • 您的 ajax 调用正在执行 "./uploads.php?" + fname。那里没有sessionId 或其他任何地方。不管这个fname 值是什么。如果你想要 php 中的 fileId,那么你需要"uploads.php?" + fname + '&amp;fileid=' + file
    • 这里的“文件”是什么?我试过 xhr.open('POST', "./uploads.php?" + '&fileId=' + file , true);但它也不再发送音频文件。
    • 当我把它改成 xhr.open('POST', "./uploads.php?" + '&fileId=' + fname , true);它正在发送音频文件,但音频文件的文件名不正确。所以问题是提取 sessionId 并将其传递给 JS ......这两行 var div 和 var fname 旨在传递 sessionId 但它不是......我该如何解决它?
    • 为什么使用 JavaScript 从 DOM 获取信息不起作用... var div = document.getElementById("bottom"); var fname = div.textContent;不确定如何测试/调试这些?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2023-04-02
    • 2014-03-23
    • 2016-04-03
    相关资源
    最近更新 更多