【问题标题】:sending uploaded file and other data , both using one ajax call发送上传的文件和其他数据,都使用一个ajax调用
【发布时间】:2018-09-20 10:47:44
【问题描述】:

我正在尝试在不使用表单操作的情况下发送上传的文件和输入文本数据(有 5 个文本字段)。这是正确的方法吗?如果我只发送 form_data 或 {} 中的值但不能同时发送,则此代码可以正常工作。这是我的代码:

actionval = document.getElementById('action').value;
titleval = document.getElementById('title').value;
stageval = document.getElementById('stage').value;
substageval = document.getElementById('substage').value;
agentval = document.getElementById('agent').value;

var file_data = $('#uploadFileTrans').prop('files')[0];   
var form_data = new FormData();
form_data.append('file', file_data);
$.ajax({
    url: "tabs/get_old_contents.php",
    data: {form_data, insert1:actionval, insert2:titleval, insert3:stageval, insert4:substageval, insert5:agentval},                         
    type: 'post',
    complete: function(response){
    alert('Details added successfully!');
            $('#restrans').html(response.responseText);
            // console.log('hey', response.responseText);
            // editor.setValue(response.responseText);
    }
 });

而 php 是这样的:

$action = (isset($_POST['insert1'])?$_POST['insert1']:"");
$title = (isset($_POST['insert2'])?$_POST['insert2']:"");
$stage = (isset($_POST['insert3'])?$_POST['insert3']:"");
$substage = (isset($_POST['insert4'])?$_POST['insert4']:"");
$agent = (isset($_POST['insert5'])?$_POST['insert5']:"");
$date = date("Y/m/d");

这是要上传的,如果我在 ajax 的数据字段中只有 form_data 就可以了

move_uploaded_file($_FILES['file']['tmp_name'], $target_path);

【问题讨论】:

  • 使用 jquery 选择器,例如 $("#action").val() 而不是 document.getElementById('action').value;很长的 vanila javascript 代码。

标签: javascript php ajax file-upload


【解决方案1】:

您不能将FormData 放在使用 AJAX 发送的对象中。您需要将其他参数添加到FormData 对象中,并将其用作数据本身。

var form_data = new FormData();
form_data.append('file', file_data);
form_data.append('insert1', actionval);
form_data.append('insert2', titleval);
form_data.append('insert3', stageval);
form_data.append('insert4', substageval);
form_data.append('insert5', agentval);
$.ajax({
  url: "tabs/get_old_contents.php",
  data: form_data,
  processData: false,
  type: 'post',
  complete: function(response) {
    alert('Details added successfully!');
    $('#restrans').html(response.responseText);
    // console.log('hey', response.responseText);
    // editor.setValue(response.responseText);
  }
});

【讨论】:

  • 这会将数据发送到php,我提到的在php文件中读取的方式,是正确的方式,还是我需要在php代码中进行更改
【解决方案2】:

您必须将所有数据添加到 FormData 对象并将其作为数据参数传递。另外,将 processData 设置为 false 并将 contentType 设置为 false。

var form_data = new FormData();
form_data.append('file', file_data);
form_data.append('insert1', actionval);
form_data.append('insert2', titleval);
form_data.append('insert3', stageval);
form_data.append('insert4', substageval);
form_data.append('insert5', agentval);
$.ajax({
    url: "tabs/get_old_contents.php",
    data: form_data,                   
    type: 'post',
    processData: false,
    contentType: false,
    complete: function(response){
            alert('Details added successfully!');
            $('#restrans').html(response.responseText);
            // console.log('hey', response.responseText);
            // editor.setValue(response.responseText);
    }
});

【讨论】:

  • 我在 jquery.min.js 上收到错误 500 内部服务器错误。我检查了所有警报,所有变量都在 php 文件中正确接收。你能帮我解决这个问题吗,这个错误已经很久了:(
  • 检查您的服务器日志以查看导致 500 错误的原因
猜你喜欢
  • 2011-09-04
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2016-03-30
  • 1970-01-01
相关资源
最近更新 更多