繁体   English   中英

用ajax传递php变量

[英]passing php variables with ajax

我一直在尝试让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和不使用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慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM