使用ajax传递php变量

passing php variables with ajax

本文关键字:变量 php 传递 ajax 使用      更新时间:2023-09-26

我一直在尝试让php重命名S3 bucket中的图像。有三个阶段

  1. 上传图片(你可以看到我之前问的问题解决方案)我已经包含了我在下面使用的代码
  2. 使用ajax为文件取我想要的名称(用户ID)将其传递给PHP重命名脚本
  3. 运行重命名脚本

第二步是给我出问题。如果我将这些名称硬编码到PHP脚本中,那么它会找到源文件并重命名它。然而,我无法使用从页面中提取的变量重命名文件。

这是HTML按钮代码

            <input type="file" id="file-chooser" />
        <button onclick= "pass()" id="upload-button">Upload to S3</button>
        <div id="results"></div>

这是JS代码

    <script type="text/javascript">
                        var bucket = new AWS.S3({params: {Bucket: 'MY BUCKET'}});
                        var fileChooser = document.getElementById('file-chooser');
                        var button = document.getElementById('upload-button');
                        var results = document.getElementById('results');
                                            button.addEventListener('click', function() {

                            var file = fileChooser.files[0];
                            if (file) {
                                results.innerHTML = '';
                            var filename = file.name;
                                var params = {Key: file.name, ContentType: file.type, Body: file};
                                bucket.upload(params, function (err, data) {
                                    results.innerHTML = err ? 'ERROR!' : 'UPLOADED';
                                    ajax_post();
                                });
                            } else {
                                results.innerHTML = 'Nothing to upload.';
                            }
                        }, false);
                        function pass() {
                            $.get("test.php");
                            return false;
                        }
                        function ajax_post() {
var ref = new 
Firebase("https://MY FIREBASE .firebaseio.com/");
            var authData = ref.getAuth();
                            // Create our XMLHttpRequest object
                            var fileChooser = document.getElementById('file-chooser');
                            var file = fileChooser.files[0];
                            var filename = file.name;
var userID = authData.uid;

                            var userID = USERS USER ID;
                            //alert($(this).attr('id'));
                            $.ajax({
                                type: "POST",
                                url: 'test.php',
                                data:  { userID : userID },
                                data: { filename : filename },
                                success: function (data) {
                                    alert("success!");
                                }
                            };
                            pass();
                        }
                    </script>

这是PHP。

    <?php
require 'vendor/autoload.php';
use Aws'S3'S3Client;

$sourceBucket = "MY BUCKET";
$sourcename1 = $_POST['filename'];
$targetKeyname = $_POST['userID'];
$targetBucket = "MY BUCKET";

$s3 = S3Client::factory(array(
    'key'    => "MY KEY",
    'secret' => "MY SECRET KEY"
));
$s3->copyObject(array(
    'Bucket'     => $targetBucket,
    'Key'        => $targetKeyname,
    'CopySource' => "{$sourceBucket}/{$sourcename}",
));
?>

正在编辑以添加我一直在进行一次又一次的测试。如果我把变量硬编码到PHP文件中,它就可以工作了。如果我将变量硬编码到JS脚本中,它将失败。ajax正在运行php文件,只是没有将变量传递给它。我已经尝试过在php端使用和不使用ISSET,但每次都无法接收变量。

有什么想法吗?

我怀疑这是您的问题var userID = USERS USER ID;我不确定这些信息来自哪里。但是,如果看不到它的来源html/js,就很难确定问题所在。

如果它的文本输入的id是userID,那么它应该是类似于:

<input type="text" name="userID" id="userID">

js:

var userID = $("#userID").val();

AJAX更新

BOTH数据合并为一个对象:

                        data:  { userID : userID },
                        data: { filename : filename },

将变成

data:  { userID : userID , filename : filename },

我发现了问题所在。是Firebase。Firebase返回了我需要的值,但是PHP脚本从AWS中检索到了一个错误。我曾认为AJAX未能传递该值,但我只对了一半。AJAX失败了,因为它当时没有值。我在上传之前添加了3秒的延迟,效果很好。Firebase只是比PHP慢。