2012-10-10 56 views
49

Tò mò nếu có ai biết sự khác biệt là gì liên quan đến tham số dữ liệu.

Tôi có phương thức $.post lấy số $('#myform').serialize() làm thông số dữ liệu của tôi và hoạt động.

Nếu tôi thử tương tự bằng cách sử dụng phương thức $.ajax(), nó không hoạt động vì thông số dữ liệu của tôi không xuất hiện chính xác.

Có ai biết sự khác biệt và những gì tôi có thể sử dụng thay vì trên .serialize không?

+1

http://stackoverflow.com/questions/7528757/post-vs-ajax – Techie

+4

RTFM - http://api.jquery.com/jQuery.post/ –

Trả lời

14

Sau khi đọc lại một số tài liệu trực tuyến, tôi quyết định gắn bó với $ .post trên $ .ajax.

param dữ liệu Các $ .ajax phương pháp của làm điều gì đó khác biệt so với các phương pháp $ .post không, không chắc chắn những gì chính xác, nhưng có một sự khác biệt.

Lý do duy nhất tôi muốn sử dụng $ .ajax là vì tôi muốn để có thể xử lý các sự kiện và đã không nhận ra tôi có thể làm như vậy với $ .post.

Đây là những gì tôi đã kết thúc với

function GetSearchItems() { 
    var url = '@Url.Action("GetShopSearchResults", "Shop", New With {.area = "Shop"})'; 
    var data = $("#ShopPane").serialize(); 
    // Clear container 
    $('#shopResultsContainer').html(''); 
    // Retrieve data from action method 
    var jqxhr = $.post(url, data); 
    // Handle results 
    jqxhr.success(function (result) { 
     //alert("ajax success"); 
     $('#shopResultsContainer').html(result.ViewMarkup); 
    }); 
    jqxhr.error(function() { 
     //alert("ajax error"); 
    }); 
    jqxhr.complete(function() { 
     //alert("ajax complete"); 
    }); 

    // Show results container 
    $("#shopResultsContainer").slideDown('slow'); 
} 
56

Bài đăng này sẽ hữu ích cho bạn.

Forum Link

Trong sau ngắn:

$.post("/ajax", {"data" : json }) 

Tương đương với:

$.ajax({ 
    type: "POST", 
    url: "/ajax", 
    data: {"data": json} 
}); 
42

Vấn đề ở đây không phải là thực tế $.ajax() không được làm việc, đó là vì bạn không thiết lập tham số kiểu trong yêu cầu Ajax và nó mặc định là một yêu cầu GET. Dữ liệu được gửi qua chuỗi truy vấn để nhận và nếu chương trình phụ trợ của bạn trông đợi chúng dưới dạng thông số bài đăng, nó sẽ không đọc chúng.

$.post chỉ là một cuộc gọi với $.ajax(), chỉ với bộ type. Đọc số docs và bạn sẽ thấy rằng $.ajax() mặc định là GET như tôi đã đề cập ở trên.

Nếu bạn truy cập trang jQuery.post trong tài liệu jQuery, nó sẽ hiển thị cho bạn yêu cầu $ .ajax với tập hợp loại. Một lần nữa đọc các tài liệu.

10

Bạn có chỉ định đây làm thông số dữ liệu hay không. $.post chỉ là viết tắt của $.ajax đang chờ đợi những điều sau đây.

$.ajax({ 
    type : 'POST', 
    url : url, 
    data : data, 
    success : success, 
    dataType : dataType 
}); 
-3

Trong $.ajax bạn có thể đồng bộ hóa, nhưng nó không phải là nơi cư trú của $.post chức năng. Để đồng bộ hóa có nghĩa là bạn có thể nhận được kết quả trả về.

var tmp; 
$.ajax({ 
    'async': false, 
    'type': "POST", 
    'global': false, 
    'dataType': 'html', 
    'url': "Your Url", 
    'data': {'type': 'data'}, 
    'success': function (data) { 
     tmp = data; 
    } 
}); 
alert(tmp); 
+4

Điều đó không đúng. Bạn có thể nhận được kết quả trả về qua: ' $ .post ("your.php", hàm (dữ liệu) {_reference ** dữ liệu ** là kết quả trả về của bạn_}) ' – blurgoon

+0

na gaking, đây là thông tin tuyệt đối không chính xác và không nên có bất kỳ upvotes. $ .ajax, $ .post và $ .get có thể TẤT CẢ kết quả trả về. –

+0

@EdDeGagne Bạn không thể nhận phản hồi trả lời bên ngoài chức năng đăng – nagaking

2

Cũng giống như một bổ sung, trong câu trả lời được chấp nhận, nó được mentionned rằng "param dữ liệu Các $ .ajax phương pháp của làm điều gì đó khác so với $.bài phương pháp thực hiện, không chắc chắn những gì chính xác, nhưng có một sự khác biệt "

hãy thử sử dụng:.

{ 
     ... 
     data: JSON.stringify(yourJsonData), 
     ... 
    } 

Else đối tượng json get của chèn trong payload như là một chuỗi url-mã hóa

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