在Ajax上传中实现JCrop - php

我正在尝试使用JQuery开发图像裁剪。
我使用ajax上传图片。图像成功后完全上传。我使用jquery将上传的图片加载到其容器中。

$("#image_upload").html("<img src='" + data.path + "' width=\"460\" id=\"cropbox\" alt=\"cropbox\" />");

但是图像选择不起作用。为什么会发生呢?
这是我的代码:

<style type="text/css">
    #preview {
        width: 150px;
        height: 150px;
        overflow: hidden;
    }
</style>
<script type="text/javascript" src="<?php echo base_url()?>asset/jqupload/js/ajaxfileupload.js">
</script>
<script type="text/javascript" src="<?php echo base_url()?>asset/jcrop/jquery.Jcrop.pack.js">
</script>
<link rel="stylesheet" href="<?php echo base_url()?>asset/jcrop/jquery.Jcrop.css" type="text/css" />
<script type="text/javascript">
    function ajaxFileUpload(){
        $("#loading").ajaxStart(function(){

            $(this).show();
        }).ajaxComplete(function(){
            $(this).hide();
        });

        $.ajaxFileUpload({
            url: '<?php echo site_url()?>/upload/do_upload',
            secureuri: false,
            fileElementId: 'fileToUpload',
            dataType: 'json',
            success: function(data, status){
                if (typeof(data.error) != 'undefined') {
                    if (data.error != '') {
                        $("#image_upload").html(data.error);
                        $("#image_upload").fadeIn("slow");
                    }
                    else {
                        $("#image_upload").html("<img src='" + data.path + "' width=\"460\" id=\"cropbox\" alt=\"cropbox\" />");
                        $("#image_upload").fadeIn("slow");
                        $("#orig_h").val(data.width);
                        $("#orig_w").val(data.height);
                        //alert("<a href='" + data.path + "' />");
                    }
                }
            },
            error: function(data, status, e){
                $("#image_upload").html(e);
                $("#image_upload").fadeIn("slow");
            }
        })

        return false;
    }

    $(document).ready(function(){
        $(function(){
            $('#cropbox').Jcrop({
                aspectRatio: 1,
                setSelect: [0, 0, $("#oring_w").val(), $("#oring_h").val()],
                onSelect: updateCoords,
                onChange: updateCoords
            });
        });

        function updateCoords(c){
            showPreview(c);
            $("#x").val(c.x);
            $("#y").val(c.y);
            $("#w").val(c.w);
            $("#h").val(c.h);
        }

        function showPreview(coords){
            var rx = $("#oring_w").val() / coords.w;
            var ry = $("#oring_h").val() / coords.h;

            $("#preview img").css({
                width: Math.round(rx * $("#oring_w").val()) + 'px',
                height: Math.round(ry * $("#oring_h").val()) + 'px',
                marginLeft: '-' + Math.round(rx * coords.x) + 'px',
                marginTop: '-' + Math.round(ry * coords.y) + 'px'
            });
        }
    });
</script>




<!-- begin main content -->
<div id="templatemo_content_area">
    <h1 class="content_title">Label Info<hr/></h1>
    <div id="templatemo_bi_full">
        <h2>Label Setting</h2>
        <div id="container">
        </div>
        <!--container-->
        <br/>
        <h2>Avatar</h2>
        <div class="info">
        </div>
        <div id="avatar_container">
            <form name="form" action="" method="POST" enctype="multipart/form-data">
                <ul>
                    <li class="leftHalf    ">
                        <label class="desc" for="lbl_type">
                            Change Your Avatar
                        </label>
                        <div>
                            <div id="avatar">
                                <img src="<?php echo $avatar?>" width="130" height="130" />
                            </div>
                            <div id="avatar_upload">
                                <input id="fileToUpload" name="fileToUpload" class="field field" value="" size="30" tabindex="5" type="file" /><input id="buttonUpload" name="buttonUpload" class="btTxt submit" type="submit" value="Upload" onclick="return ajaxFileUpload();"/><img id="loading" src="<?php echo base_url()?>asset/jqupload/images/loading.gif" style="display:none;">
                            </div>
                        </div>
                    </li>
                </ul>
                <ul id="crop_container">
                    <li class="leftHalf    ">
                        <label class="desc" for="lbl_name">
                            Avatar for crop
                        </label>
                        <div id="image_upload">
                            <img src="<?php echo $avatar?>" width="450" height="130" id="cropbox" name="cropbox" />
                        </div>
                    </li>
                    <li class="rightHalf     ">
                        <label class="desc" for="lbl_type">
                            Crop Display
                        </label>
                        <div id="preview">
                            <img src="<?php echo base_url() . 'files/' ?>" alt="thumb" />
                        </div>
                    </li>
                    <div class="info">
                    </div>
                    <li class="buttons ">
                        <input name="saveForm" class="btTxt submit" type="submit" value="Crop and Save" />
                    </li>
                </ul>
    <input type="text" id="x" name="x" />
    <input type="text" id="y" name="y" />
    <input type="text" id="w" name="w" />
    <input type="text" id="h" name="h" />
    <input type="text" id="oring_w" name="oring_w" />
    <input type="text" id="oring_h" name="oring_h" />
            </form>
        </div>
        <div class="cleaner">
        </div>
    </div>
    <div class="cleaner">
    </div>
</div>
<!-- end main content -->

请帮帮我 ....

参考方案

这是行不通的,因为您是通过ajax调用获取图片的。当您在document.ready上调用jcrop函数时,该图像不存在。在DOM中添加图像后,需要将jcrop代码放入ajax调用的成功函数中。应该是这样的(未经测试):

    $.ajaxFileUpload({
            url: '<?php echo site_url()?>/upload/do_upload',
            secureuri: false,
            fileElementId: 'fileToUpload',
            dataType: 'json',
            success: function(data, status){
                if (typeof(data.error) != 'undefined') {
                    if (data.error != '') {
                        $("#image_upload").html(data.error);
                        $("#image_upload").fadeIn("slow");
                    }
                    else {
                        $("#image_upload").html("<img src='" + data.path + "' width=\"460\" id=\"cropbox\" alt=\"cropbox\" />");//it is important to add the jcrop code after this line
                        $("#image_upload").fadeIn("slow");
                        $("#orig_h").val(data.width);
                        $("#orig_w").val(data.height);
                        $('#cropbox').Jcrop({
                            aspectRatio: 1,
                            setSelect: [0, 0, $("#oring_w").val(), $("#oring_h").val()],
                            onSelect: updateCoords,
                            onChange: updateCoords
            });

                    }
                }
            },
            error: function(data, status, e){
                $("#image_upload").html(e);
                $("#image_upload").fadeIn("slow");
            }
        })

故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php

我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

PHP-复选框组 - php

我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…

使用PHP包含时的淡入淡出过渡 - php

我正在尝试使用jQuery或CSS(或其他方式!)在DIV中包含的php页面上创建淡入淡出或滑动过渡。我四处搜寻,发现了很多淡入淡出过渡的示例,这些实例彼此淡入淡出div或隐藏内容淡入淡出,但是这种情况略有不同。我有一个DIV,其内容由导航栏控制。选中后,每个页面都可以使用PHP成功地包含在div中,但我想使内容淡入和淡出。关于如何在页面更改之间进行漂亮过渡…

AJAX调用只能与$(document).on('click')一起使用 - php

我有一个显示数据库条目的表。用户能够为每一行打开一个弹出菜单。选项之一是删除数据库条目,并且该表应通过AJAX调用相应地刷新。只要有人单击#delete-toggle中的table-popup,我就会在HTML页面上进行AJAX调用(table-popup是div,当有人单击每行中存在的表中的table-edit-button时出现的表): <div …