2011-09-26 38 views
6

Đây là lần đầu tiên tôi làm việc với json. Tôi đang cố gắng trả lại Json từ phương thức hành động của tôi:Kết quả Json được bọc trong thẻ trước - cách lấy giá trị của nó

public JsonResult Upload() 
{ 
    ... 
    return Json(new { foo = "sos....sos....sos..."}); 
} 

Nhưng kết quả tất cả tôi nhận được là gói tin của tôi trong thẻ "trước" này. Làm thế nào để phân tích "foo" từ điều này?

"<pre style="word-wrap: break-word; white-space: pre-wrap;">{"foo":"sos....sos....sos..."}</pre>" 

Trả lời

13

Tôi nghĩ lý do bạn nhận dữ liệu được bao bọc trong thẻ trước là vì bạn đang yêu cầu dữ liệu dưới dạng HTML chứ không phải văn bản thuần túy hoặc json.

Thử chỉ định loại dữ liệu là json để dừng phản hồi được chuyển đổi thành HTML.

+0

Đang sử dụng 'tiêu đề ('Content-Type: application/json')' trong PHP trên Chrome. Có vẻ như đầu ra được gói trong một tiền tố với một tab được thêm vào bất chấp tiêu đề. –

+0

Tôi nghĩ @Fenchurch trả lời tốt hơn câu hỏi này, đó không phải là cách để tránh thẻ 'pre', mà là cách lấy nội dung của nó. – ProfK

+0

@ProfK Đây là một câu trả lời tốt hơn nhiều, OP không muốn thẻ 'pre' .. họ chỉ hỏi làm thế nào để phân tích các foo ra bởi vì họ không biết họ có thể tránh nó. Tại sao chuyển đổi từ json sang html sau đó quay lại json? – Arth

3

Hàm này trả về nội dung của thẻ đầu tiên trước tiên với lớp "lớp của bạn".

document.querySelector("pre.yourclass").innerHTML 
0

Có thể trình xử lý ở phía máy khách đang cố gắng đảm bảo rằng phản hồi của máy chủ là HTML được định dạng tốt. Tôi tin rằng một số thư viện javascript có hỗ trợ tải tệp lên sẽ bao gồm các đại diện không phải HTML trong thẻ khi bạn mô tả. Một giải pháp rất không trực quan có thể là đặt mimetype ở máy chủ thành "text/html", do đó trình xử lý ajax không cố gắng trả lời.

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