2012-10-14 65 views
2

我使用http://www.malsup.com/jquery/form/#ajaxForm來表示我的表單。 我設置了一個表單,通過Ajax將圖像上傳到服務器。一切工作正常,沒有IE9 :)。 我無法從服務器獲取JSON響應,雖然在其他瀏覽器上它可以正常工作。 我試圖在成功函數中放置一些alert(),但它看起來成功函數不是事件加載的。IE9中的jQuery表單插件中沒有JSON響應

我的JS代碼:

$(function() { 

    $('#upload-image').ajaxForm({ 
     dataType: 'json', 
     success: processJson 
    }); 

    function processJson(data) { 
     var i = 0; 
     $.each(data, function(key, val) { 
      $('<li id="image_' + key + '"><input type="checkbox" name="delete_image[' + key + ']" /><img src="' + val + '" alt=""/></li>').hide().appendTo('#images').delay(i).fadeIn('slow'); 
      i += 1000; 
     }); 
    } 

}); 

和代碼生成PHP JSON響應:

$output = array(); 

    foreach ($files['Filedata'] as $file) 
    { 
     $file_arr = $this->_save_image($file); 

     $image = ORM::factory('image'); 

     $image->filename = $file_arr['filename']; 
     $image->gallery_id = $gallery_id; 
     $image->save(); 

     $output[$image->id] = Route::get('uploads')->uri(array('dir' => 'images/120x120', 'file' => $image->filename)); 

    } 
    $this->request->headers('Content-type','application/json; charset='.Kohana::$charset); 
    $this->response->body(json_encode($output)); 

我發現有關類似問題(除去從響應html標籤)一些帖子,但它不幫助我。 有什麼不對?

編輯: IE調試模式告訴我,該訪問被拒絕在與「form.submit();」的行上。在jQuery表單插件庫中。 它似乎是一些與本地主機上運行JavaScript有關的安全拒絕。

+0

嘗試將您的$ this-> request->標題行註釋掉並進行檢查。因爲如果你傳遞的是dataType:json,那麼你不需要從你的php – GBD

+0

中設置json頭,你的表單動作是什麼? – GBD

+0

評論此行並沒有幫助。我的動作直接在表單標籤內設置。 – deem

回答

3

這可能是由於IE9不識別字符集而導致的錯誤。我不得不面對類似的問題。

我這個本應幫助

$.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; charset=utf-8"}); 
+0

它沒有改變:/。 – deem

0

它不是用JSON,甚至服務器響應的問題。正如我可以看到你的更新,問題與我的一樣,IE不允許提交,所以沒有請求=沒有迴應。

我試圖找出什麼問題,作者頁面上的例子工程 - 我的不是。

+0

不,IE提交表單,因爲它爲我節省了我的圖片:)。我已經通過設置'$ this-> auto_render = false'(Kohana框架)解決了我的問題,同時也是'internal'($ this-> request-> is_internal())請求,現在它工作正常:)。 – deem

+0

對不起,我有類似的問題 - 無法事件開始文件上傳,因爲「訪問被拒絕」上submit(); – WombaT