Javascript Ajax FormData使用POST类型,但在PHP文件中无法获取任何请求
我无法解决问题。如果我缺乏知识并犯了愚蠢的错误,我会提前道歉。这是我的一段代码Javascript Ajax FormData使用POST类型,但在PHP文件中无法获取任何请求,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我无法解决问题。如果我缺乏知识并犯了愚蠢的错误,我会提前道歉。这是我的一段代码 <!-- Piece of html --> <div class="form-group"> <input class="form-control" placeholder="Enter Service image" id="edit_service_image-1" type="file" name="file_image"> </div&
<!-- Piece of html -->
<div class="form-group">
<input class="form-control" placeholder="Enter Service image" id="edit_service_image-1" type="file" name="file_image">
</div>
<button type="button" class="btn btn-primary" onclick="processIt(<?php echo $service['service_id'];?>,'esi',document.getElementById('edit_service_image-1').files[0])">Edit</button>
这里是modify.php(仅测试代码)
已解决
感谢所有指导我的人
只是javascript中的一个变化起了作用。以下是processIt()函数中经过更改的代码,它满足了我的目的->
function processIt(id,flag,inputvalue)
{
var filedata = new FormData();
filedata.append('imagefile', inputvalue);
filedata.append('id', id);
filedata.append('flag', flag);
$.ajax({
url: 'modify.php',
type: 'POST',
data: filedata, // Here instead of inputvalue it's changed to data
contentType: false,
processData: false,
cache: false
}).success(function(msg) {
alert(msg);
});
}
我不知道您是如何获得此选项的:
inputvalue:
,但这样可以:
function processIt(id,flag,inputvalue){
$.ajax({
url: 'modify.php',
type: 'POST',
data: {inputvalue:'imagefile',id:id, flag:flag},
contentType: false,
processData: false,
cache: false,
success: function(msg) {
alert(msg);
}
});
}
您需要将“inputvalue”替换为“data”
因此,您的代码看起来更像这样:
function processIt(id,flag,inputvalue)
{
var filedata = new FormData();
filedata.append('imagefile', inputvalue);
filedata.append('id', id);
filedata.append('flag', flag);
$.ajax({
url: 'modify.php',
type: 'POST',
data: { mydata: filedata },
contentType: false,
processData: false,
cache: false
}).success(function(msg) {
alert(msg);
});
}
然后在modify.php中执行以下操作:
var_dump($_POST);
查看post数据是否可访问。我的答案基于此。不确定从何处获得
inputvalue
,但将其替换为数据
function processIt(id, flag, inputvalue)
{
var data = new FormData();
data.append('imagefile', inputvalue);
data.append('id', id);
data.append('flag', flag);
$.ajax({
url: 'modify.php',
type: 'POST',
data: data,
contentType: false,
processData: false,
cache: false,
success: function (msg) {
alert(msg);
}
});
}
在PHP代码中只是一个友好的代码检查,避免使用$\u REQUEST
,并且您在IF条件中做了太多不必要的检查。这里有一种解决方法:
if (!empty($_POST['flag']) && !empty($_POST['id'])) {
$flag = $_POST['flag'];
$id = $_POST['id'];
echo "Processed";
} else {
echo "Request not processed";
}
您也可以尝试提供一些验证和消毒功能的函数。不幸的是,没有输入文件,您必须使用$\u文件
数组
假设id是一个整数,您可以执行以下操作:
$flag = filter_input(INPUT_POST, 'flag', FILTER_SANITIZE_STRING);
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
if ($flag && $id) {
echo "Processed";
} else {
echo "Request not processed";
}
您是否尝试将
$\u请求
更改为$\u帖子
?是的,我尝试过,但同样可以执行打印($\u帖子)代码>在PHP脚本的开头,编辑问题中的输出?是的,我已经做了。它显示输出数组{}使用浏览器开发工具的网络选项卡。你在请求中看到你期望的数据了吗?那不行。您不能通过向数据传递普通对象来包含文件。我的意思是我们不需要FormData()?很抱歉,我没有看到您正在上载文件。在旧浏览器中,不能使用DirectAjax。使用ajaxForm插件可以吗?这很简单,不需要很多代码。我尝试添加var_dump($_POST)及其显示输出->数组(0){},如果你使用console.log(filedata)的话,输出是什么?它在控制台中显示FormData{}
,如果我点击它,它可能会显示一些东西,我不明白。但我看不出有任何预期的价值。您可以在填充filedata的行中添加注释,并执行以下操作:var filedata=“test”;看看这是否能传递给php?这很酷。我不明白为什么我会得到-1,但好吧,憎恨者无处不在嗨,迈克。谢谢,现在它起作用了。我只是在代码中使用了data:filedata。我不需要更改filedata的名称,现在它已工作。:)令人惊叹的。我用一些关于PHP的额外信息编辑了我的答案。
var_dump($_POST);
function processIt(id, flag, inputvalue)
{
var data = new FormData();
data.append('imagefile', inputvalue);
data.append('id', id);
data.append('flag', flag);
$.ajax({
url: 'modify.php',
type: 'POST',
data: data,
contentType: false,
processData: false,
cache: false,
success: function (msg) {
alert(msg);
}
});
}
if (!empty($_POST['flag']) && !empty($_POST['id'])) {
$flag = $_POST['flag'];
$id = $_POST['id'];
echo "Processed";
} else {
echo "Request not processed";
}
$flag = filter_input(INPUT_POST, 'flag', FILTER_SANITIZE_STRING);
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
if ($flag && $id) {
echo "Processed";
} else {
echo "Request not processed";
}