使用ajax传递php变量
passing php variables with ajax
我一直在尝试让php重命名S3 bucket
中的图像。有三个阶段
- 上传图片(你可以看到我之前问的问题解决方案)我已经包含了我在下面使用的代码
- 使用ajax为文件取我想要的名称(用户ID)将其传递给PHP重命名脚本
- 运行重命名脚本
第二步是给我出问题。如果我将这些名称硬编码到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慢。
相关文章:
- 将PHP变量传递给jQuery时遇到问题
- 通过javascript重定向html传递php变量
- 如何在php变量中嵌入JQuery代码
- 在javascript函数中使用php变量
- 将地理编码结果转换为php变量以发布到mysql数据库
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 如何将变量php传递给javascript
- 显示动态变量(php和javascript)的总数
- 传递变量PHP、Javascript location.reload和HTML输入
- 需要将变量 php 的值传递给 javascript,但我不能
- 将变量从 .html 传递到太大而无法容纳在 URL 中的变量.php
- 如何在函数中传递javascript中的变量php
- 在Jquery中插入变量PHP
- 选择正确的变量 php/javascript
- 将HTML存储在变量PHP中,然后回显它
- 将变量PHP Smarty传递给Javascript
- 传递HTML表单post数据到不同的文件/网页javascript变量(php)
- 问题与传递变量(php, sql, jquery拖拽)
- 设置PHP中的javascaript变量(PHP在javascript中)
- 将变量php问题化为代码jquery