【问题标题】:Isset does not work with ajax callIsset 不适用于 ajax 调用
【发布时间】:2015-12-25 11:12:15
【问题描述】:

我正在制作一个简单的页面,用户可以在其中上传图片而无需刷新整个页面。但是if(isset($_post[oneimgtxt])) 不起作用.. 这是我上传图片的服务器端代码:

<?php
$maxmum_size = 3145728; //3mb 
$image_type_allowed = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP);
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if(isset($_POST["oneimgtxt"])){//<!------------------ this line is not working
        if((!empty($_FILES[$_FILES['upimage']['tmp_name']])) && ($_FILES["upimage"]['error'] == 0)){
            $file=$_FILES['upimage']['tmp_name'];
            $image_count = count($_FILES['upimage']['tmp_name']);
            if($image_count == 1){
                $image_name = $_FILES["upimage"]["name"];
                $image_type = $_FILES["upimage"]["type"];
                $image_size = $_FILES["upimage"]["size"];
                $image_error = $_FILES["upimage"]["error"];
                if(file_exists($file)){//if file is uploaded on server in tmp folder (xampp) depends !!
                    $filetype =exif_imagetype($file); // 1st method to check if it is image, this read first binary data of image..
                    if (in_array($filetype, $image_type_allowed)) {
                        // second method to check valid image
                        if(verifyImage($filename)){// verifyImage is function created in fucrenzione file.. using getimagesize
                            if($ImageSizes < $maxmum_size){//3mb 
                                $usr_dir = "folder/". $image_name;
                                move_uploaded_file($file, $usr_dir);
                            }else{
                                $error_container["1006"]=true;
                            }
                        }else{
                            $error_container["1005"]=true;
                        }
                    }else{
                        $error_container["1004"]=true;
                    }
                }else{
                    $error_container["1003"]=true;
                }
            }else{
                $error_container["1002"]=true;
            }
        }else{
            $error_container["1007"]=true;
        }
    }else{//this else of image issset isset($_POST["oneimgtxt"])
        $error_container["1001"]=true;//"Error during uploading image";
    }
    echo json_encode($error_container);
}
?>

在 chrome 检查元素中我得到了这个.. image 这是我的 ajax js 代码...

$(".sndbtn").click( function(e){
        var form = $("#f12le")[0];
        var formdata = new FormData(form)
        $.ajax({
            type:'POST',
            //method:'post',
            url: "pstrum/onphotx.php",
            cache:false,
            data: {oneimgtxt : formdata},
            processData: false,
            contentType: false,
            success:function (e){console.log(e);}
        });
    });

这里是html代码:

<form  method="post" id="f12le" enctype="multipart/form-data">
   <input type="file" name="upimage"/>
   <label for="imgr">Choose an Image..</label>
   <textarea placeholder="Write something about photo"></textarea>
   <input   type="button" name="addimagedata" value="Post" class="sndbtn"/>
</form>

感谢您的帮助。

【问题讨论】:

  • 将此添加到您的 ajax 请求 mimeType: "multipart/form-data",
  • 添加您的表单 html 也可以更好地解决您的问题。

标签: javascript php jquery ajax file-upload


【解决方案1】:

您应该将您的FormData 作为一个完整的数据对象发送,而不是另一个数据对象的一部分。所以,应该是这样的——

$(".sndbtn").click( function(e){
    var form = $("#f12le")[0];
    var formdata = new FormData(form)
    $.ajax({
        type:'POST',
        //method:'post',
        url: "pstrum/onphotx.php",
        cache:false,
        data: formdata,
        processData: false,
        contentType: false,
        success:function (e){console.log(e);}
    });
});

现在,您应该可以按原样访问表单了。例如,如果您在表单中有任何名称为inputxt 的输入,您应该能够使用$_POST['inputxt'] 访问它。如果您有任何input type="file" 名称为upimage,则需要通过$_FILES['upimage'] 访问。所以,如果你想为此做isset()。你可以这样做:

if(isset($_FILES['upimage'])){

【讨论】:

  • 我添加 html 代码请告诉我有什么问题.. 我没有任何名称 withoneimgtxt
  • 首先修复我在JS中提到的点,然后你需要从$_FILES而不是$_POST访问上传的文件。
  • 我如何在服务器端通过 ajax 发送表单数据?我应该这样做 if(isset($_post[inputfilename])){} 吗?
  • 我已经在回答中提到了。请检查最后一句话,以了解如何从服务器端访问您的输入文件。
  • if(isset($_FILES['upimage'])){
【解决方案2】:

使用文件输入随时在表单上添加 enctype

  <form enctype="multipart/form-data" >
  <input type=file />
  ...
  </form>

并确保它始终是一个 POST 请求。 祝你好运...!

【讨论】:

    【解决方案3】:

    我为这件事头疼!你应该在你的 php 代码中使用$_FILES['name_of_dom_element'];

    【讨论】:

    • 我也是.. 我不能投票给你们,因为需要 15 个说唱
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 2021-08-13
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多