Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax FormData使用POST类型,但在PHP文件中无法获取任何请求_Javascript_Php_Jquery_Ajax - Fatal编程技术网

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";
}