2012-01-11 30 views
5

Dưới đây là một số javascript:Phương thức post() của jquery có thể gọi một trang web asp.net 3.5 không?

$.ajax({ 
     type: "POST", 
     url: "default.aspx/GetDate", 
     contentType: "application/json; charset=utf-8", 
     data: {}, 
     dataType: "json", 
     success: function(result) { 
      alert(result.d); 
     } 
    }); 

Các phương pháp trên làm việc như tôi mong chờ và cảnh báo chuỗi trở về từ [WebMethod] gọi getdate trong default.aspx

Nhưng khi tôi sử dụng:

$.post(
     "default.aspx/GetDate", 
     {}, 
     function(result) { 
      alert(result.d); 
     }, 
     "json" 
    ); 

Cảnh báo trong phương pháp thành công này không bao giờ cháy.

Trong firebug tôi có thể thấy POST đã hoạt động cơ bản - nó trả về 200 OK
Nhưng phản hồi trong trường hợp này là HTML của toàn bộ trang default.aspx chứ không phải JSON trả về khi tôi sử dụng $ .ajax() phương pháp.

EDIT:
Phản hồi và tiêu đề yêu cầu được hiển thị trong firebug KHÔNG giống nhau.

Với $ .ajax() ...

REQUEST: 
Accept application/json, text/javascript, */*; q=0.01 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Accept-Encoding gzip, deflate 
Accept-Language en-gb,en;q=0.5 
Connection keep-alive 
Content-Type application/json; charset=utf-8 
Cookie (removed) 
Host (removed) 
Referer (removed) 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 
X-Requested-With XMLHttpRequest 

RESPONSE: 
Cache-Control private, max-age=0 
Content-Length 27 
Content-Type application/json; charset=utf-8 
Date Wed, 11 Jan 2012 12:36:56 GMT 
Server Microsoft-IIS/7.5 
X-Powered-By ASP.NET 

Với $ .post() ...

REQUEST: 
Accept application/json, text/javascript, */*; q=0.01 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Accept-Encoding gzip, deflate 
Accept-Language en-gb,en;q=0.5 
Connection keep-alive 
Cookie (removed) 
Host (removed) 
Referer (removed) 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1 
X-Requested-With XMLHttpRequest 

RESPONSE: 
Cache-Control private 
Content-Length 13815 
Content-Type text/html; charset=utf-8 
Date Wed, 11 Jan 2012 12:36:53 GMT 
Server Microsoft-IIS/7.5 
X-AspNet-Version 2.0.50727 
X-Powered-By ASP.NET 

Tôi có thể sử dụng phương pháp này $ .post() cho điều này, hoặc tôi có phải sử dụng phương thức $ .ajax() không?

+0

Bạn có chắc chắn * các tiêu đề yêu cầu giống nhau không? Tiêu đề 'Content-Type' có thay đổi không? – lonesomeday

+0

Bạn có chắc chắn cần gọi một dịch vụ web không? Tôi đã thực sự làm điều này bằng cách sử dụng $ .get và trả về HTML thuần túy (không có tiêu đề) và nó hoạt động hoàn hảo cho các nhu cầu của tôi. Nếu điều này sẽ giúp sau đó cho tôi biết và tôi sẽ đăng một số mã. – Archer

+0

Nhiều lần như tôi đã đọc chúng @lonesomeday, sự nghi ngờ của bạn là chính xác - "Content-Type: application/json; charset = utf-8" thực sự là trong Request Headers từ cuộc gọi $ .ajax(). – mikev2

Trả lời

3

Điều đó là bình thường. Khi bạn sử dụng $.post, bạn không thể đặt contentType: 'application/json' như bạn thực hiện với $.ajax. Và máy chủ mong đợi tiêu đề này. Vì vậy, về cơ bản bạn không thể gọi một phương thức trang ASP.NET với $.post.

+0

Cảm ơn Darin - đây là câu trả lời tôi đang tìm kiếm và tôi nghĩ rằng bạn đã có trong đầu tiên. – mikev2

+0

Một chút muộn sau khi thực tế, nhưng muốn thêm rằng điều này là một phần không chính xác. '$ .post()' ** có thể được sử dụng miễn là lệnh gọi '$ .ajaxSetup()' được tạo trước khi cấu hình các tham số mặc định cho yêu cầu async. Tôi có xu hướng cấu hình các tham số này trong các trang chủ hoặc các khung nhìn bố trí của mình, vì vậy các cuộc gọi tiếp theo tôi thực hiện thành công bằng cách sử dụng '$ .post()'. – lsuarez

+0

Tôi vừa mới nhìn thấy @lthibodeaux này - nhưng cảm ơn bạn đã đăng bài. Nó trông rất hữu ích. – mikev2

3

Tôi cho rằng điều này là do mã máy chủ của bạn yêu cầu tiêu đề Content-Type cần được đặt. Việc triển khai mặc định là $.post không cho phép điều này.

Tuy nhiên, nếu mỗi lần bạn sử dụng AJAX trong ứng dụng của bạn, bạn cần tiêu đề này để có mặt, bạn có thể sửa đổi $.post:

$.post = function (url, data, callback, type) { 
    if (jQuery.isFunction(data)) { 
     type = type || callback; 
     callback = data; 
     data = undefined; 
    } 

    return jQuery.ajax({ 
     type: 'POST', 
     url: url, 
     data: data, 
     success: callback, 
     dataType: type 
     contentType: "application/json; charset=utf-8" 
    }); 
}; 

Với điều này, tất cả$.post cuộc gọi sẽ có contentType bộ. Đây có thể là một ý tưởng hay; nó có thể không ...

+0

Cảm ơn rất nhiều vì câu trả lời đúng của bạn và giải pháp thay thế - Tôi sẽ không sử dụng nó, vì có thể thấy tại sao nó có thể là một vấn đề. Cũng nhờ giúp tôi hiểu tại sao nó thất bại. Tôi không thể tìm thấy bất kỳ đề cập đến điều này là trường hợp bất cứ nơi nào. EDIT: Thật không may tôi không thể đánh dấu hai bài viết là câu trả lời, và thậm chí không thể upvote bạn như danh tiếng của tôi là dưới đây 15. Tôi sẽ cố gắng nhớ để trở lại khi nó được! – mikev2

+2

@ mikev2 Bạn cũng có thể định nghĩa một hàm '$ .postMVC', có nghĩa là sẽ làm như vậy nhưng chỉ khi bạn muốn tập' contentType'. Điều đó sẽ không ảnh hưởng đến các cuộc gọi '$ .post' bình thường. – lonesomeday

+0

Bây giờ _that_ nghe như một ý tưởng hay, tôi nghĩ rằng tôi sẽ sử dụng! Cảm ơn một lần nữa :) – mikev2

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