如何在CodeIgniter中调试AJAX的非工作响应?

时间:2015-11-26 05:12:37

标签: php jquery ajax codeigniter

我想在CodeIgniter中使用jquery-ajax上传照片。首先,我想将文件传递给我的控制器,以便检查我的AJAX调用是否正常工作。 我的代码没有向控制器发布任何内容。我在这里发布我的代码,请告诉我我的错误

这是我的代码

jQuery和我对视图的输入在这里(profile_view.php)

<script type="text/javascript">
$(document).ready(function() {
    $("#file1").on("change", (function() {
        $("#showimage").fadeIn("slow").html('');
        $("#showimage").fadeIn("slow").html('Plaese Wait...');
        alert('hello');
        $("#frm1").ajaxForm({
            target: '#showimage',
            success: function(response) {
                alert(response);
            },
            error: function(err) {
                alert(err);
            }
        }).submit();
    }));
</script>

我的输入代码在这里

<div id="photoframe">
    <form name='frm1' id="frm12" enctype="multipart/form-data" method="post" action="upload_photo">
        <input type="file" name="file1" id="file1" style="visibility:hidden" />
    </form>
    <a style="color:white"><i class="fa fa-edit" id="img1">Edit  Photo</i></a>
    <div id="showimage" name='showimage'>
    </div>
</div>

我的控制器在这里(upload_photo.php)

class Upload_photo extends CI_Controller {
function __construct() {
    parent::__construct();
    $this - > load - > helper(array('form', 'url'));
}
public
function index() {
    $config['upload_path'] = '/user';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size'] = '100';
    $config['max_width'] = '1024';
    $config['max_height'] = '768';
    if (isset($_POST['frm1'])) {
        echo 'Image Uploaded';
        echo "post".$_FILE['frm1'];
    } else {
        echo 'Image Upload Failed';
    }
}
}

我的输出是:Image Upload Failed

2 个答案:

答案 0 :(得分:0)

我认为您的请求存在问题,您还没有传递任何带有该请求的数据,您可以使用以下数据方法通过ajax传递数据: -

$.ajax({
     url: "post.php",
     data: {
        id: 123
    },
     type: "GET",
     dataType : "json",
     success: function( json ) {
        // Do your code here for success
    },
     error: function( xhr, status, errorThrown ) {
        alert( "Sorry, there was a problem!" );
    },
     complete: function( xhr, status ) {
        alert( "The request is complete!" );
    }
});

并且您无法使用这些AJAX请求发送图像文件。

请更改您的PHP代码,如下所示: -

if (isset($_FILES['frm1'])) {
   // Do your upload code here
}
else
{
    echo 'Image Upload Failed';
}

答案 1 :(得分:0)

这是对非处理数据的ajax调用(在您的情况下为上传图像):

var form = $('frm12');

        var formdata = false;

        if (window.FormData){
            formdata = new FormData(form[0]);
        }

        var formAction = form.attr('action');
        $.ajax({
            url: formAction,
            data : formdata ? formdata : form.serialize(),
            cache : false,
            contentType : false,
            processData : false,

            dataType: "json",
            type : 'POST',
            resetForm: true,
        })
        .done(function(data) {
           //returned response
        })
        .fail(function() {
            console.log("error");
        })
        .always(function() {
            console.log("complete");
        });

请注意&#34; processData:false&#34;,这需要tel ajax不作为标准数据传输。

&#34;默认情况下,作为对象传入数据选项的数据(技术上,不是字符串)将被处理并转换为查询字符串,适合默认的内容类型&#34;应用程序/ x-WWW窗体-urlencoded&#34 ;.如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。&#34;来自http://api.jquery.com/jquery.ajax/。你可以在这里找到关于jquery.ajax设置的解释。

值得一提的是,如果你想在将数据发送到服务器之前进行一些检查(我重新考虑这个),你也可以使用&#34; beforeSend:beforeSubmit,&#34;设置&#34; beforeSubmt&#34;是一个可以实现所有必要检查的函数(例如允许的文件类型,允许的文件大小等等)。如果出现故障,则不会上传数据。