2011-08-09 125 views
1

我通過cfcontent調用來流式傳輸圖片,並試圖在允許用戶將它們旋轉90度後刷新圖片。在我的主要照片頁面中,我有一個精選圖片div,一個圖庫div和一個照片細節div。在加載頁面時,除非有會話變量存在,否則特色/圖庫div將被取消填充,在這種情況下會包含相關模板。如果div未填充,單擊導航欄菜單將觸發ajax調用以加載所選圖片。在ajax調用後cfcontent不會刷新

這一切都運行良好。我的問題是當選擇並加載圖片時,以及用戶想旋轉它時。旋轉按鈕會觸發一個調用來旋轉並保存圖片(該圖片有效),然後嘗試刷新特色/圖庫div以顯示更新後的圖片。這是它破裂的地方。儘管圖片是旋轉的,刷新整個頁面會以更新後的形式顯示,但ajax調用不會顯示更新後的圖片。這些刷新調用在附加到其他事件處理程序時已成功使用,所以我不認爲它們被錯誤地調用。也許有什麼神祕的使用cfcontent?

這裏是我在隔離的相關位的嘗試:

主頁:

<div id="featured_pic"> 
    <cfif isDefined('session.currentPhotoName') and #session.currentPhotoName# neq ""> 
    <cfinclude template="featuredImage.cfm"> 
    </cfif> 
</div> 

<div id="gallery_container"> 
    <cfif isDefined('session.category') and isDefined('session.param') 
    and #session.category# neq "" and #session.param# neq "" 
    > 
    <cfinclude template="photoGallery.cfm"> 
    </cfif> 
</div> 

特色image.cfm:

<cfif isDefined('url.file_name')> 
    <cfset session.currentPhotoName = #url.file_name#> 
</cfif> 

<cfoutput> 
    <cfset thisImage = #session.currentPhotoName#>  
    <img 
    id="photoPlaceholder" 
    src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm?thisImage=#thisImage#" 
    width="600px" 
    /> 
</cfoutput> 

DisplayPhoto.cfm:

<cfcontent 
    type = "image/*" 
    file = "C:\#replace(application.local_file_path, '/', '')#\Photos\#thisImage#" 
    deleteFile = "No" 
> 

和js t Ø做到這一點(包裹在$(文件)。就緒()):

$('#rotate').live('click', function(){ 
    var id = $('#docID').val(); 
    var title = $('#title').text(); 
    title = $.trim(title); 

    // rotate the image and refresh the details container 
    $('#details_container').load('Administration/PhotoManagement/photoDetails.cfm', {'DOC_ID': id, 'title': title, 'rotateFlag': true}, function(response, status, xhr) { 
     if (status == "error") { 
      var msg = "Sorry but there was an error: "; 
      $("#details_container").html(msg + xhr.status + " " + xhr.statusText); 
     } 
    }); 

    // refresh the gallery 
    var category = $('#currentCategory').val(); 
    var param = $('#currentParam').val(); 
    $.get(
     'Administration/PhotoManagement/photoGallery.cfm', 
     {category:category, param:param}, 
     function(response, status, xhr){ 
      if (status == "error") { 
       var msg = "Sorry but there was an error: "; 
       $("#photos").html(msg + xhr.status + " " + xhr.statusText); 
      } else { 
       $('#gallery_container').html(response); 
      } 
     } 
    ); 

    // refresh the featured image 
    $('#featured_pic').load('Administration/PhotoManagement/featuredImage.cfm', 
     {'file_name': title}); 

}); 

注意,作爲一個新手到阿賈克斯,我一直在嘗試.load(),獲得(),和。 ajax()看看有什麼作用。從jQuery In Action中,我知道我應該使用GET來執行這些操作,是真的嗎?

編輯:下面的建議下,我試着給它:

$.ajax({url:'Administration/PhotoManagement/featuredImage.cfm', 
     cache: false, 
     data: {file_name: title}, 
     success: function(response){ 
      $('#featured_pic').html(response); 
      alert('success'); 
     } 
    }); 

,我也試着設置

$.ajaxSetup({ cache: false}); 

我的$(document)。就緒()內,無濟於事。圖片旋轉,如果我刷新整個頁面,我可以看到更改,但ajax調用,雖然它告訴我我已經成功,但不顯示更新的圖片。

回答

5

使用Get方法的Ajax請求被緩存。要麼追加一個虛擬時間參數,要麼使用Post請求。

+0

啊......我明白了。所以添加?_ = [time_stamp],或者只是使用$ .ajax(cache:false)來代替? – earachefl

+0

user724075,只需添加諸如{url:'Administration/PhotoManagement/featuredImage.cfm?cachebreaker ='+ new Date() –

+0

正如在編輯的問題中指出的那樣,我試過設置cache:false無濟於事。 – earachefl