用ajax传递php变量

时间:2016-05-05 18:00:31

标签: javascript php ajax amazon-s3

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

  1. 上传图片(你可以看到我之前要求查看的问题 解决方案)我已经包含了我在下面使用的代码。
  2. 使用ajax获取我想要的文件名(用户ID)和 将它传递给PHP重命名脚本。
  3. 运行重命名脚本。
  4. 第二步给我带来了麻烦。如果我将名称硬编码到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,它每次都无法接收变量。

    有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我怀疑这是你的问题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 },

答案 1 :(得分:0)

我发现了问题所在。这是Firebase。 Firebase返回了我需要的值,但PHP脚本正在从AWS检索错误。我曾假设AJAX未能通过该值,但我只是对了一半。 AJAX失败了,因为它在那时没有值。我在上传发生之前加了3秒延迟,它运行正常。 Firebase只比PHP慢。