2011-07-02 56 views
0

我有一個讓我發瘋的問題。我正在構建一個CMS系統,其中包括使用jquery ajax插件(uploadify)上傳圖像,並使用codeigntier的圖像調整大小類根據用戶指定的尺寸調整服務器端的大小。codeigniter圖像大小調整和ajax/json問題。請幫忙!

問題是偶爾(大約7次之一)圖像調整大小失敗的圖像之一(最多5次一次發送圖像)導致ajax後功能超時。從CI的錯誤日誌中可以看出其中一個文件已損壞。不太清楚這是怎麼發生的,但無論如何 - 我試圖建立一個錯誤系統,如果發生這種情況,通過json發送一個錯誤信息,這個錯誤信息會被javascript提醒,只是要求他們再試一次或者別的什麼。但這裏是problem-

在我的模型,我有:

foreach($size_image as $si){ 
       if(!$this->resize_image($si['dimensions'],$si['fileName'],$si['oldPath'],$si['newPath'])){ 
        return false;   // I can confirm this does indeed return false whenever the image resize problem occurs...                   
       } 
      } 

在我的控制,我有:

function save_page(){ 
    if($this->admin_model->save_page()){ 
     $return_array['error'] = ''; 
    }else{ 
     $return_array['error'] = 'Sorry, there was a problem processing one of the images.'; 
    } 
    $return_array['success'] = true; 
    echo json_encode($return_array); 
    exit(); 
} 

每當調整工程(和save_page函數返回true)回聲JSON編碼工作正常,並在另一端收到和處理的JavaScript。但不是當它返回假!

只是爲了證明我不傻,我可以代替如果($這個 - > admin_model-> save_page()){如果(!$這個 - > admin_model-> save_page()){ (這意味着當調整大小工作時,我現在得到錯誤信息) - 是的,我在屏幕上看到錯誤信息!

因此,無論何時出現這個調整大小問題,出於某種原因,上述功能只是拒絕迴應json,即使它肯定會進入腳本的這部分。

而對於絕對清晰,我可以這樣做:

function save_page(){ 
    if($this->admin_model->save_page()){ 
     $return_array['error'] = ''; 
    }else{ 

    // $return_array['error'] = 'Sorry, there was a problem processing one of the images.';   

     $this->load->helper('file'); 
     write_file('testOutput.txt','ERROR!!!!');  // <-- and yep, I get 'ERROR' written to this file. 
     exit();   
    } 
    $return_array['success'] = true; 
    echo json_encode($return_array);     // <-- ...so why the hell doesn't this work then? 
    exit(); 
} 

爲什麼啊爲什麼啊,爲什麼?

非常歡迎任何幫助或建議,非常感謝提前。

回答

0

也許因爲您返回

$ return_array [ '成功'] = TRUE;

每次,即使它失敗?

+0

嗨trix,感謝您的回覆。 '成功'只是表明json數據已經交付。通過檢查錯誤是否被設置來確定服務器端功能的實際成功或失敗。 – Inigo

+0

所以你不會得到服務器對你的ajax調用的響應。 請看看這篇文章在SO:http://stackoverflow.com/questions/578190/can-file-uploads-time-out-in-php – trix