2010-06-08 27 views
8

Tôi đang trả về một số json cần được xử lý bởi javascript làm phản hồi cho XMLHTTPRequest.Trình duyệt muốn Content-Type header phản hồi jj ajax là gì?

Nếu tôi đặt loại nội dung của phản hồi thành "văn bản/đồng bằng", tất cả các trình duyệt nhưng Chrome sẽ chấp nhận và chuyển nó đến JS của tôi mà không gặp vấn đề gì. Tuy nhiên, Chrome sẽ bao gồm phản hồi trong

<pre style="word-wrap: break-word; white-space: pre-wrap;"> 

trước khi chuyển nó đến javascript của tôi.

Nếu tôi đặt loại nội dung của phản hồi thành ứng dụng "thích hợp"/json "tất cả các trình duyệt nhưng Firefox sẽ chấp nhận và chuyển nó cho JS của tôi mà không có vấn đề gì. Firefox, tuy nhiên sẽ yêu cầu lưu hoặc mở phản hồi dưới dạng tệp.

Loại nội dung trình duyệt chéo chính xác là gì?

+0

bản sao có thể có của [Loại * nội dung JSON *?] (Http://stackoverflow.com/questions/477816/the-right-json-content-type) –

+1

Có thể. Ngoại trừ chủ đề đó có câu trả lời * sai * (nếu bạn sử dụng câu trả lời ở đó, firefox hoạt động như một đứa trẻ có trọng tài) –

+0

Firefox hoạt động như thế nào? Nếu bạn đang đề cập đến việc lưu và tải xuống, hãy thử đề xuất "Mở trong trình duyệt" như được đề cập ở đây: http://stackoverflow.com/questions/94767 –

Trả lời

7

Bạn có thể giải quyết vấn đề bằng cách phân tích các câu trả lời vào đối tượng JSON bằng cách sử dụng jQuery funcion parseJSON - http://api.jquery.com/jQuery.parseJSON/

Tham số bạn vượt qua vào chức năng là chuỗi đối tượng JSON, mà bạn trích xuất từ ​​dữ liệu đáp ứng:

function AjaxResponse (data) { // AJAX post callback 
    var jsonResult = $.parseJSON(data.substring(data.indexOf("{"), data.lastIndexOf("}") + 1)); 
} 

Tested (ngoài Chrome mà vấn đề này giải quyết) trong FF và IE8 cho kết quả JSON đơn giản sau đây, cho các trình duyệt khác và phản ứng phức tạp hơn không đảm bảo ...


LƯU Ý: các kiểu nội dung trong trường hợp này là text/plain hoặc text/html Tôi nghĩ rằng - Tôi đã sử dụng sau chức năng ASP.Net MVC để trả lại kết quả

ContentResult System.Web.Mvc.Controller.Content(string content); 

đâu tôi trở về đối tượng JSON như

System.Web.Script.Serialization.JavaScriptSerializer jsonSerializer 
    = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var jsonResponse = jsonSerializer.Serialize(
    new { IArticleMediaId = 0 
     , ImageUrl = Url.Content(fullImgPath) 
     }); 
return Content(jsonResponse); 
0

tôi sử dụng thay thế trong kết quả như dưới đây:

this.jjAjaxFileUpload = function (inputFileId,inputTextSelector,viewImgSelector){ 
    $(this.selector).click(function(){ 
     if($("#"+inputFileId.replace("#", "")).val()==""){ 
      new jj("Chose a file at first").jjDialog(); 
      return; 
     } 
     $.ajaxFileUpload({ 
      url :'UploadServlet', 
      secureuri:false, 
      fileElementId:inputFileId.replace("#", ""), 
      dataType: 'JSON', 
      cache: false , 
      success: function(data){ 
       if(data!=null){ 
        data = data.replace('<pre style="word-wrap: break-word; white-space: pre-wrap;">',''); 
        data = data.replace('<PRE style="word-wrap: break-word; white-space: pre-wrap;">',''); 
        data = data.replace("<PRE>", '').replace("</PRE>", '').replace("<pre>", '').replace("</pre>", '').replace("upload/", '').replace("Upload/", ''); 
        data = data.replace("/", '').replace("/", '').replace("\\", ''); 
       }else{ 
        new jj('error.').jjDialog(); 
       } 
       $("#"+inputFileId.replace("#", "")).val('');      
       if(data!=""){ 
        if(data!="big"){ 
         $(inputTextSelector).val(data); 
         if(viewImgSelector!=null){ 
          $(viewImgSelector).attr('src','upload/'+data); 
         } 
        }else{ 
         new jj('Error : file is too big!!!').jjDialog(); 
        } 
       }else{ 
        new jj('error').jjDialog(); 
       } 
      } 
     }); 
    }); 
}; 

Lưu ý rằng:

inputTextSelector là một lĩnh vực văn bản để lưu trữ tên của tập tin tải lên

viewImgSelector là id của thẻ img để xem trước hình ảnh được tải lên.

Các vấn đề liên quan