dataForm jQuery Ajax到PHP

时间:2017-11-13 10:00:23

标签: php jquery json ajax

我的代码无法正常工作,3小时后,我不明白为什么它不起作用。有人可以帮帮我吗?我的目标是使用jQuery将表单字段和图像发送到PHP。作为XHR,我没有得到任何回应。我唯一看到的是(参数):

-----------------------------163541139317822
Content-Disposition: form-data; name="staffnumber"

utyu
-----------------------------163541139317822
Content-Disposition: form-data; name="nameperson"

yu
-----------------------------163541139317822
Content-Disposition: form-data; name="fileupload"; filename=""
Content-Type: application/octet-stream


-----------------------------163541139317822--

控制台出错:SyntaxError:JSON.parse:JSON数据第1行第1列的意外数据结尾。

HTML

<form method="POST" id="formadduser" enctype="multipart/form-data"> 
    <div id="staffnumber" class="form-group row">
        <label for="staffnumber" class="col-sm-3 col-form-label"><strong>Personeelsnummer</strong> <img src="api/icons/info.svg"></label>
        <div class="col-sm-4">
            <input class="form-control" id="staffnumber" name="staffnumber" value="" type="text">
        </div>
    </div>
    <div id="nameperson" class="form-group row">
        <label for="nameperson" class="col-sm-3 col-form-label"><strong>Naam</strong> <img src="api/icons/info.svg"></label>
        <div class="col-sm-4">
            <input class="form-control" id="nameperson" name="nameperson" value="" type="text">
        </div>
    </div>
    <div id="rowstarttime" class="form-group row">
        <label for="starttime" class="col-sm-3 col-form-label"><strong>Afbeelding</strong></label>
        <div class="col-sm-4">
        <label class="custom-file">
            <input type="file" id="fileupload" class="custom-file-input" name="fileupload">
            <span class="custom-file-control"></span>
        </label>
        </div>
    </div>

  <div class="modal-footer">
  <button id="modaladdusersave" class="btn btn-primary mx-sm-3" type="submit">Opslaan</button>
    <button type="button" class="btn btn-secondary" data-dismiss="modal">Sluiten</button>
</form>

的jQuery

$("#formadduser").submit(function(e) {
    e.preventDefault();

    var formData = new FormData(this);
    alert(formData);
    alert('hoi');
    $.ajax({
        ajax_call: "add_user",
        url: '/api/add.php',
        type: 'POST',
        data: formData,
        async: false,
        success: function (data) {
            var data = $.parseJSON( data ); 
            alert(data)
        },
        cache: false,
        contentType: false,
        processData: false
    });

    return false;
});

PHP

<?php

require_once('../database.php');

if(isset($_GET['ajax_call']) && $_GET['ajax_call'] == 'add_user') {

$staffnumber = $_GET['staffnumber']; // $_GET['staffnumber'];
$nameperson = $_GET['nameperson']; // $_GET['nameperson'];

$file = $_FILES['fileupload']['tmp_name'];  
$targetPath = "upload/".$_FILES['fileupload']['name']; // Target path where file is to be stored
move_uploaded_file($sourcePath,$targetPath) ;    // Moving Uploaded file


// Add record
// $queryNew = 'INSERT INTO Persons (id, name, image) VALUES ("'. $staffnumber .'", "'. $nameperson .'", "test")';
// mysqli_query($conn, $queryNew);

$data = array(
        'staffnumber'   => $staffnumber,
        'nameperson'    => $nameperson,
    );
echo json_encode($data);
exit;

}

?>

2 个答案:

答案 0 :(得分:0)

使用post方法代替get获取php文件中的记录,因为你通过jquery传递数据是在post方法中,

if(isset($_GET['ajax_call']) && $_GET['ajax_call'] == 'add_user') {
$staffnumber = $_GET['staffnumber']; // $_GET['staffnumber'];
$nameperson = $_GET['nameperson'];

而不是

if(isset($_POST['ajax_call']) && $_POST['ajax_call'] == 'add_user') {
$staffnumber = $_POST['staffnumber'];
$nameperson = $_POST['nameperson'];

这里的move_uploaded_file($sourcePath,$targetPath)源路径是什么? 你必须在move_uploaded_file($_FILES['fileupload']['tmp_name'],$targetPath) ;

传递临时文件

答案 1 :(得分:0)

我认为你应该处理move_uploaded_file的返回值。

作为PHP文档

如果filename不是有效的上传文件,则不会执行任何操作,move_uploaded_file()将返回FALSE。

如果filename是有效的上传文件,但由于某种原因无法移动,则不会执行任何操作,move_uploaded_file()将返回FALSE。此外,还会发出警告。

$moved = move_uploaded_file($_FILES['fileupload']['tmp_name'],$targetPath)

if( $moved ) {
   $data = array(
    'staffnumber'   => $staffnumber,
    'nameperson'    => $nameperson,
);
   echo json_encode($data);        
} else {//something went wrong
   $data = array(
    'error'   => $_FILES["file"]["error"]
    );
   echo json_encode($data);  
}

它将为您提供以下错误代码值1到8之一:

UPLOAD_ERR_INI_SIZE =价值:1;上传的文件超出了php.ini中的upload_max_filesize指令。

UPLOAD_ERR_FORM_SIZE =价值:2;上传的文件超出了HTML表单中指定的MAX_FILE_SIZE指令。

UPLOAD_ERR_PARTIAL =价值:3;上传的文件仅部分上传。

UPLOAD_ERR_NO_FILE =值:4;没有上传文件。

UPLOAD_ERR_NO_TMP_DIR =价值:6;缺少临时文件夹。在PHP 5.0.3中引入。

UPLOAD_ERR_CANT_WRITE =价值:7;无法将文件写入磁盘。在PHP 5.1.0中引入。

UPLOAD_ERR_EXTENSION =价值:8; PHP扩展程序停止了文件上载。 PHP没有提供确定哪个扩展名导致文件上传停止的方法;使用phpinfo()检查加载的扩展名列表可能会有所帮助。