2011-11-07 23 views
1

當用戶上傳照片,它是通過一個控制器(簡檔/ upload_picture)運行用於文件類型,文件大小驗證等jQuery表單插件 - 有沒有辦法在Ajax成功上加載頁面?

如果驗證返回一個錯誤,則通過Ajax顯示在前面的誤差上傳結束。這工作。

但是,如果驗證沒有返回錯誤,我想自動加載另一個控制器/視圖,允許用戶裁剪圖片(profile/crop_picture)。

這是可能的通過jquery使用malsup's Form plugin

下面的代碼不能成功,我仍然堅持上傳頁面。

這裏是我的代碼:

的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); 
}); 

upload_picture控制器

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(); 
} 
+0

你能確認你的成功回調是否運行?這聽起來像是在兩種情況下都運行,因爲你說在出現驗證錯誤時可以看到錯誤消息。所以真正的問題不在於「$('body')。load('profile/crop_picture');」工作中?您可以在該行之前放置一個警報,以確認其運行?然後,你也可以添加一個完成的回調,看看你的ajax方法crop_picture是否工作:$('body')。load('profile/crop_picture',function(txt,txtStatus){ alert('Load loaded:' + txtStatus); } – Nick

回答

0

也許你可以做一個簡單的重定向到作物上。我看不到你如何處理上傳的圖像,但你可以隨時保存圖像ID或網址或任何你用作會話flashdata變量,並在裁剪頁面上使用它。

+0

shomz - 如果我在控制器上重定向沒有任何反應 - 我認爲它是b/c圖像最初是通過ajax提交的,控制器上的任何操作都將通過Ajax傳回,這不是我們想要的 - - 我們想要一個硬重定向(頁面刷新),我想知道這是否可以成功完成 – pepe

+0

然後,你可以重寫裁剪方法是這樣的: function crop_picture($ image_id)... 而你提供圖片ID從ajax,然後重用它在重定向url。這是否有道理? – Shomz

+0

btw。我的意思是你應該redirec t在主控制器/頁面上,當然不是ajax。 – Shomz

1

你可以試試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); 

}); 

希望這能解決您的問題。

相關問題