【问题标题】:Codeigniter ajax input file gather valueCodeigniter ajax 输入文件收集值
【发布时间】:2017-05-30 12:02:31
【问题描述】:

我之前尝试过查看一些示例,但是在 ajax 中,当我们使用表单数据时,我们需要单独序列化它吗?因为我序列化了普通数据并且它很好,但是输入文件类型我不能通过发布他的值,但是如果我打印它正确显示的值但是在具有他的名字引用的数据中不起作用。

我的表单示例代码:

<form id="Add-Form" action="" method="post" class="form-horizontal" enctype="multipart/form-data">
    <div class="form-group">
        <label class="label-control col-md-2"> tt </label>
        <div class="col-md-8">
           <input type="file" id="sd"  name="s" class="btn btn-default" ></input>
        </div>
    </div>

这里是 ajax 部分。

var url = $('#Add-Modal').attr('action');
var data = $('#Add-Form').serialize();

var title = $('input[name=title]');
var body = $('textarea[name=subject]');
var file = $('input[name=s]');

$.ajax({
    type: 'ajax',
    method: 'post',
    url: url,
    data: data,
    async: false,
    dataType: 'json',

【问题讨论】:

  • 而不是单独使用这个字段:var data = $(this).serialize() 在表单提交上
  • 是的,但我用这种方式来获得个性化验证字段:)

标签: javascript php jquery ajax codeigniter


【解决方案1】:

使用 ajax 上传图片:

试试这个方法

<form id="Add-Form" action="Your controller method name(Example:<?=base_url().'Test_controller/test_image'?>)" method="post" class="form-horizontal" enctype="multipart/form-data">
    <div class="form-group">
       <label class="label-control col-md-2"> tt </label>
       <div class="col-md-8">
          <input type="file" id="sd"  name="s" class="btn btn-default" ></input>
    <input type="submit" name="submit" value="submit">
       </div>
    </div>
</form>

jQuery 代码:

<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("#Add-Form").submit(function(e){
            e.preventDefault();
            var formData = new FormData($("#Add-Form")[0]);

            $.ajax({
                url : $("#Add-Form").attr('action'),
                dataType : 'json',
                type : 'POST',
                data : formData,
                contentType : false,
                processData : false,
                success: function(resp) {
                    console.log(resp);                    
                }
            });
        });
    });

</script>

控制器:

function test_image() {
  print_r($_FILES);
}

【讨论】:

  • 问题是我有一个带有信息的普通表单,我不想只传递图像名称的信息,我想传递图像名称/文件和另一个,但如果有演员表,则需要 idk其中。你的方式会让事情变得不同
  • 顺便说一句,你如何在追加后处理表单数据,我的意思是我如何选择我收到的文件,因为如果我 console.log 表单数据它不显示对象,它是空白的跨度>
  • Formdata 是对象类型并以编码格式发送数据,因此您无法在控制台中打印数据。但您可以在控制器功能中打印数据。和 FormData 将所有数据发布到表单标签之间可用的控制器功能。所以根据你的第一条评论,我的回答是 formdata 发送任何你想要的数据。@Enigma
  • 是的,但我不得不阅读一些文档,因为我正在发送数据和 formData,但是当我在控制器处处理时,我的 ajax 总是出错,而没有打印或控制台日志任何内容
  • 代码相同,我只是删除了正常数据并通过 formData 发送所有内容,但是当我处理时 $_FILES 还没有工作
猜你喜欢
  • 2017-01-11
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2011-05-03
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多