[英]passing php variables with ajax
我一直在尝试让php重命名S3 bucket
的映像。 有三个阶段
第二步给我麻烦。 如果我将名称硬编码到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.