2009-02-23 44 views
19

Tôi có trang web nơi trang của mỗi người dùng hiển thị nhận xét và cho phép người dùng khác thêm nhận xét. Tôi muốn có nó để các mẫu bình luận thêm là trên trang và khi một người dùng thêm một bình luận, nó được thêm vào cơ sở dữ liệu và hiển thị trong phần bình luận với AJAX. Tôi đang sử dụng jQuery cho AJAX và LINQ to SQL để xử lý logic cơ sở dữ liệu. Làm thế nào sẽ đi về việc này để sau khi bình luận được thêm vào cơ sở dữ liệu, phần ý kiến ​​được làm mới và cập nhật mà không làm mới trang?ASP.NET MVC AJAX với jQuery

Trả lời

22

Bạn sẽ cần tận dụng sự kiện 'thành công' (hoặc 'hoàn thành') được kích hoạt bởi cuộc gọi jQuery ajax để kích hoạt cuộc gọi AJAX tiếp theo để làm mới nội dung bài đánh giá của bạn. Điều này có lẽ sẽ giống như thế (có cánh nó, chưa được kiểm tra):

function UpdateComments(){ 
    resultHTML = jQuery.ajax({ 
     type: 'GET', 
     url: 'Comments/List/UserID' 
    }).responseText; 

    $('#comments').html(resultHTML); 
} 

function PostComment(targetUserID, commenterUserID, comment) 
jQuery.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     data: $.toJSON({review: comment, id:targetUserID, commenter:commenterUserID}), 
     dataType: 'json', 
     url: 'Comments/Add', 
     success: function(result){ 
      // Only update comments if the post was successful: 
      resultJson = $.evalJSON(result); 
      if(resultJson['success'] == true){ 
       UpdateComments();      
      } 
     } 
    }); 

EDIT Mã JSON sẽ tận dụng các plugin jquery jquery-json (http://code.google.com/p/jquery-json/)

+2

url nên là: '/ Comments/Add' ... nếu không url được nối vào url hiện tại và nhiều khả năng bạn sẽ nhận được một 404. –

+1

Trong thực tế, nó có lẽ tốt hơn để sử dụng một trong những người trợ giúp MVC để thực sự tạo ra đường dẫn, bởi vì hàng đầu/cũng sẽ ném mọi thứ ra nếu trang web của bạn đang hoạt động như một ứng dụng lồng nhau dưới một trang web khác trong IIS – Matt

11

Để đối phó với Matt, một cách khác để gửi dữ liệu biểu mẫu, thay vì JSON, bạn có thể gọi $ ('# form'). serialize() trong trường 'dữ liệu' của hàm jQuery.ajax. Điều này sẽ loại bỏ sự cần thiết cho một plugin.

Ngoài ra, tôi không phải là chuyên gia về chủ đề này, vẫn cố gắng tự học, nhưng cần phải có cả yêu cầu POST và GET khi bạn có thể chèn phản hồi từ ASP.NET MVC vào trang thay thế ? Điều này sẽ dẫn đến một yêu cầu. Có thể có một lý do hợp lệ cho cách tiếp cận đó mặc dù. Tôi đoán tôi sẽ trông như thế này:

// The Controller Action should return a PartialView as response, 
    // so just a user control that contains the comments. 
function PostComment(targetUserID, commenterUserID, comment) 
jQuery.ajax({ 
    type: 'POST', 
    data: $('#commentForm').serialize(), 
    url: 'Comments/Add', 
    success: function(result){ 
     $('#comments').html(result); 


     } 
    } 
    }); 
+0

Hi Julian - đó là một điểm rất tốt RE: kết hợp các kết quả nhận xét mới vào phản hồi POST. Tôi cho rằng nó sẽ tóm tắt cho bạn biết bao nhiêu của một quạn RESTful purist. Cá nhân, tôi sẽ kết hợp nó vào câu trả lời, để tiết kiệm chuyến đi khứ hồi, mặc dù một số người thuần túy có thể tranh luận khác. – Matt

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