Helpex - Trao đổi & giúp đỡ Đăng nhập
71

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

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

Nếu tôi thử tương tự bằng cách sử dụng $.ajax()phương pháp này, nó không hoạt động vì thông số dữ liệu của tôi có vẻ không 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ì những thứ trên .serializekhông?

71 hữu ích 1 bình luận 65k xem chia sẻ
83

Chủ đề diễn đàn jquery này tóm tắt nó:

$.postlà một cách viết tắt để sử dụng $.ajaxcho các yêu cầu POST, vì vậy không có nhiều sự khác biệt giữa việc sử dụng cả hai - cả hai đều có thể thực hiện được bằng cách sử dụng cùng một mã cơ bản. $.gethoạt động trên một nguyên tắc tương tự.

—Addyosmani

Trong ngắn hạn, điều này:

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

Tương đương như sau:

$.ajax({ 
  type: "POST", 
  url: "/ajax", 
  data: {"data": json} 
});
83 hữu ích 0 bình luận chia sẻ
50

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

$.postchỉ là một cuộc gọi với $.ajax(), chỉ với typebộ. Đọc tài liệu 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 type set. Một lần nữa đọc tài liệu.

50 hữu ích 0 bình luận chia sẻ
26

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 hơn $ .ajax.

Tham số dữ liệu của phương thức $ .ajax thực hiện điều gì đó khác với phương thức $ .post, không chắc chắn chính xác là gì, 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 rằng 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');
}

JQuery 3.x

Các phương thức gọi lại jqXHR.success (), jqXHR.error () và jqXHR.complete () bị loại bỏ kể từ jQuery 3.0. Thay vào đó, bạn có thể sử dụng jqXHR.done (), jqXHR.fail () và jqXHR.always ().

var jqxhr = $.post(url, data);
// Handle results
jqxhr.done(function(result) {
    //alert("ajax success");
});
jqxhr.fail(function() {
    //alert("ajax error");
});
jqxhr.always(function() {
    //alert("ajax complete");
});

https://api.jquery.com/jquery.post/

26 hữu ích 5 bình luận chia sẻ
13

Bạn có chỉ định đây là tham số dữ liệu. $.postchỉ là một cách viết tắt cho $.ajaxnhững gì đang mong đợi sau đây.

$.ajax({
    type : 'POST',
    url : url,
    data : data,
    success : success,
    dataType : dataType
});
13 hữu ích 0 bình luận chia sẻ
3

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

hãy thử sử dụng:

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

Khác đối tượng json được chèn vào tải trọng dưới dạng một chuỗi mã hóa url.

3 hữu ích 0 bình luận chia sẻ
0

Sử dụng $ .ajax, chúng tôi có thể thực hiện các yêu cầu GET hoặc POST. Sử dụng $ .post, chúng tôi chỉ có thể thực hiện yêu cầu đăng bài. Sử dụng $ .get, chúng tôi có thể thực hiện chỉ nhận được yêu cầu.

$.ajax()    // Performs an async AJAX request
$.get()     // Loads data from a server using an AJAX HTTP GET request
$.post()    // Loads data from a server using an AJAX HTTP POST request
0 hữu ích 0 bình luận chia sẻ
-6

Trong $.ajaxbạn có thể đồng bộ hóa, nhưng nó không thể trong $.postchứ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);
-6 hữu ích 4 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ javascript jquery ajax asp.net mvc serialization , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading