Php jQuery表单插件-有没有办法加载Ajax成功页面?

Php jQuery表单插件-有没有办法加载Ajax成功页面?,php,javascript,jquery,ajax,codeigniter,Php,Javascript,Jquery,Ajax,Codeigniter,当用户上传照片时,它会通过一个控制器(profile/upload_picture)上传,该控制器会对文件类型、文件大小等进行验证 如果验证返回错误,则在前端通过Ajax显示错误。这很有效 但是如果验证没有返回错误,我想自动加载另一个控制器/视图,允许用户裁剪图片(profile/crop_picture) 这可以通过Jquery使用吗 下面的代码不成功,我仍然停留在上传页面上 这是我的密码: 视图中的jQuery $("#file_select").change(function(){

当用户上传照片时,它会通过一个控制器(profile/upload_picture)上传,该控制器会对文件类型、文件大小等进行验证

如果验证返回错误,则在前端通过Ajax显示错误。这很有效

但是如果验证没有返回错误,我想自动加载另一个控制器/视图,允许用户裁剪图片(profile/crop_picture)

这可以通过Jquery使用吗

下面的代码不成功,我仍然停留在上传页面上

这是我的密码:

视图中的jQuery

$("#file_select").change(function(){

        var options = {
        type:           'post',
        dataType:       'json',
        resetForm:      true,
        beforeSubmit:       function(){
                                $('#loading').show();
                                $('#validation_message').html('');
                        },
        success:            function(data){

                                if (data.success == 0) {
                                    $('#loading').hide();
                                    $('#validation_message').html(data.message).fadeIn();

                                } else {
                                    $('body').load('profile/crop_picture');
                                }
                        }
    };

    $('#upload_form').ajaxSubmit(options);
});
上传图片控制器

function upload_picture()
{
    if ($this->input->post('upload')) {

        $upload = $this->profile_model->upload_picture();

        if ($upload) { // if there are upload errors

            $val['success'] = '0';
            $val['message'] = '<div class="error_message" style="margin:20px 0">' . $upload . '</div>';
            echo '<textarea>' . json_encode($val) . '</textarea>'; 
        } else {

                   //redirecting here seems to have no effect

                }
    }

    $data['selector'] = 'picture';
    $data['records']  = $this->profile_model->get_user_data();

    $string = $this->load->view('account/prf/profile_crop_vw', $data, TRUE);
    $this->template->write('content', $string);
    $this->template->render();
}
函数上传图片()
{
如果($this->input->post('upload')){
$upload=$this->profile_model->upload_picture();
如果($upload){//如果有上载错误
$val['success']='0';
$val['message']='.$upload';
回显“”。json_编码($val)。“”;
}否则{
//在这里重定向似乎没有效果
}
}
$data['selector']='picture';
$data['records']=$this->profile_model->get_user_data();
$string=$this->load->view('account/prf/profile\u crop\u vw',$data,TRUE);
$this->template->write('content',$string);
$this->template->render();
}

也许您可以简单地重定向到裁剪页面。我看不出您是如何处理上传的图像的,但您可以始终保存图像ID或url或任何用作会话flashdata变量的内容,并在裁剪页面上使用它。

也许您可以简单地重定向到裁剪页面。我看不出您是如何处理上传的图像的,但您可以始终保存图像ID或url或任何用作会话flashdata变量的内容,并在裁剪页面上使用它。

您可以在那里尝试javascript窗口加载功能。 像这样:

$("#file_select").change(function(){

   var options = {
      type:          'post',
      dataType:      'json',
      resetForm:     true,
      beforeSubmit:  function() {
                        $('#loading').show();
                        $('#validation_message').html('');
                     },
      success:       function(data) {
                        if (data.success == 0) {
                           $('#loading').hide();
                           $('#validation_message').html(data.message).fadeIn();
                        } else {
                           window.location.href='profile/crop_picture';
                           location.reload();   
                        }
                    }
   };

   $('#upload_form').ajaxSubmit(options);

});

希望这能解决您的问题。

您可以在那里尝试javascript窗口加载功能。 像这样:

$("#file_select").change(function(){

   var options = {
      type:          'post',
      dataType:      'json',
      resetForm:     true,
      beforeSubmit:  function() {
                        $('#loading').show();
                        $('#validation_message').html('');
                     },
      success:       function(data) {
                        if (data.success == 0) {
                           $('#loading').hide();
                           $('#validation_message').html(data.message).fadeIn();
                        } else {
                           window.location.href='profile/crop_picture';
                           location.reload();   
                        }
                    }
   };

   $('#upload_form').ajaxSubmit(options);

});

希望这能解决您的问题。

shomz-如果我在控制器上重定向,什么都不会发生-我认为这是b/c图像最初是通过ajax提交的,控制器上的任何操作都将通过ajax传递回来,这不是我们想要的-我们想要硬重定向(页面刷新)我想知道如果成功的话是否可以这样做,然后你可以重写裁剪方法,使其类似于:函数crop\u picture($image\u id)。。。您可以从ajax提供图像id,然后在重定向url中重用它。这有意义吗?顺便说一句。我的意思是你应该在主控制器/页面上重定向,当然不是ajax。shomz-如果我在控制器上重定向,什么都不会发生-我认为这是b/c图像最初是通过ajax提交的,控制器上的任何操作都将通过ajax传回,这不是我们想要的-我们想要一个硬重定向(页面刷新)我想知道如果成功的话是否可以这样做,那么您可以将裁剪方法重写为:函数crop\u picture($image\u id)…您可以从ajax提供图像id,然后在重定向url中重新使用它。这有意义吗?顺便说一句,我的意思是您应该在主控制器/页面上重定向,而不是在ajax页面上重定向。您可以确认是否运行了成功回调吗?听起来它在这两种情况下都会运行,因为您说过在出现错误时可以看到错误消息验证错误。那么,这真的不取决于“$('body').load('profile/crop_picture');”是否正常工作吗?能否在该行之前添加一个警报以确认它是否正常运行?然后还可以添加一个完整的回调,以查看裁剪_picture的ajax方法是否正常工作:$('body').load('profile/crop_picture',函数(txt,txtStatus){alert('Load was performed:'+txtStatus);}您能确认您的成功回调是否运行了吗?听起来它在这两种情况下都运行,因为您说过在出现验证错误时可以看到错误消息。所以,问题不在于“$('body').Load('profile/crop_picture');”正在工作?能否在该行之前放置一个警报以确认其运行?然后还可以添加一个完整的回调,以查看裁剪图片的ajax方法是否工作:$('body').load('profile/crop_picture',function(txt,txtStatus){alert('load已执行:'+txtStatus);}