parsererror SyntaxError:JSON输入的意外结束

时间:2016-11-20 03:47:50

标签: javascript php json

当我添加if(isset($_POST['uplprofimg']))时,我收到错误:

parsererror SyntaxError: Unexpected end of JSON input

如果我排除了php if isset post函数,代码就可以正常工作。

所以,PHP:

if(isset($_POST['uplprofimg'])){ //← This  if broke my code >:(
        //Works if I remove the ↑
        if($_FILES['imagefile']['size'] > 5242880){
            $ress = "<div class='error'>Max file size is 5MB</div>";
            echo json_encode(array('response' => false,'ress' => $ress));
        }else{
            $imgtype = pathinfo($_FILES['imagefile']['name'],PATHINFO_EXTENSION);
            if(!in_array($imgtype,array('jpg','jpeg','png','gif'))){
                $ress = "<div class='error'>Only <b>jpg</b>, <b>jpeg</b>, <b>png</b> and <b>gif</b> files are allowed (".$imgtype.")</div>";
                echo json_encode(array('response' => false,'ress' => $ress));
            }else{
                $newimgname = "/profile_picture/".random_num($length = 8).time().random_num($length = 8).".".$imgtype;
                $newimgnameserv = $_SERVER['DOCUMENT_ROOT'].$newimgname;
                if(move_uploaded_file($_FILES['imagefile']['tmp_name'],$newimgnameserv)){
                    $upuser = $mysqli->prepare('UPDATE accinfo SET profilepic = ? WHERE username = ?');
                    $upuser->bind_param('ss',$newimgname,$username);
                    $check = $upuser->execute();
                    if($check == true){
                        echo json_encode(array('response' => true));
                    }else{
                        $ress = "<div class='error'>SQL Error</div>";
                        echo json_encode(array('response' => false,'ress' => $ress));   
                    }
                }else{
                    $ress = "<div class='error'>Couldn't move the file. Please try again later.(".$newimgname.")</div>";
                    echo json_encode(array('response' => false,'ress' => $ress));
                }
            }
        }
    }

和JS:

$("#uploadimgform").on("submit",function(event){
    event.preventDefault();

    var formData = new FormData(this);

    $("#uploadlistener").html("<img src='/images/load.gif' width='50px' />");

    $.ajax({
        type: 'POST',
        url: "/system/requests.php",
        data: formData,
        dataType: "json",
        cache: false,
        contentType: false,
        processData: false,
        success: function(data){
            if(data.response === true){
                $("#bodyfader").fadeOut("slow");
                $("#expandedupl").fadeOut("slow");
                $("#uploadlistener").html("");
            }else{
                $("#uploadlistener").html(data.ress);
                $('#profilepic').css('background', 'url(/images/defaultprof.png)');
                $("#profilepic").css("background-size","cover");
                $("#profilepic").css("background-position","center");
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log(textStatus, errorThrown);
        }
    });
});

如果删除if(isset($_POST['uplprofimg'])){...},则代码可以正常运行。但是如果我在那里添加它,我会得到json错误。发生了什么事?

HTML表单:

<form method='POST' enctype="multipart/form-data" id='uploadimgform' style='display: none;'>
     <input type='file' id='upload' name='imagefile' accept="image/x-png,image/gif,image/jpeg" />
     <input type='submit' id='uploadconf' name='uplprofimg' />
</form>

这是表单的提交方式:

$("#upload").change(function(){
    if(this.files[0].size > 5242880){
        $("#uploadlistener").html("<div class='error'>Maximum file size is 5MB.</div>");
        $("#upload").val("");   
    }else{
        $("#uploadimgform").submit();
        readURL(this);
    }
});

我不知道为什么,但我这样做了:

formData.append('uplprofimg',1);

并且代码有效。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

我认为这里的问题是您正在使用FormData将提交按钮值发送到服务器。

submit元素未添加到条目中。

submit specificationconstruction of the formData中找不到清晰的细节。

确实,运行此代码段时,我们可以看到提交值未附加到FormData中。

var formData = new FormData(document.querySelector('#myForm'));
for (var p of formData.entries()) {
  console.log(p[0] + " " + p[1]);
}
<form id="myForm">
  <input type="text" name="sometext" value="This is submitted" />
  <input type="submit" name="Submit" value="someSubmitValue" />
</form>

如果您需要发送一些不属于显示的输入元素的其他数据,我建议您使用隐藏的输入。

答案 1 :(得分:-1)

您需要在upload_max_filesize文件中设置php.ini选项。 默认最大大小为2M。您需要设置更高的值:

upload_max_filesize = 32M