web-dev-qa-db-ja.com

$ .postと$ .ajaxの違いは?

データパラメータに関する違いが何かを知っている人がいるかどうか興味があります。

データパラメータとして$('#myform').serialize()を取り、機能する_$.post_メソッドがあります。

$.ajax()アプローチを使用して同じことを試しても、データパラメーターが正しく表示されないため、機能しません。

誰もが上記の_.serialize_の代わりに違いと私が使用するものを知っていますか?

58
Ed DeGagne

いくつかのオンラインドキュメントを読み直した後、$。ajaxではなく$ .postを使用することにしました。

$ .ajaxメソッドのデータパラメータは、$。postメソッドとは異なる動作をします。正確には何がわからないのですが、違いがあります。

$ .ajaxを使用したかった唯一の理由は、イベントを処理できるようにしたいのに、$。postで処理できることに気づかなかったためです。

ここに私が終わったものがあります

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

JqXHR.success()、jqXHR.error()、およびjqXHR.complete()コールバックメソッドは、jQuery 3.0から削除されました。代わりにjqXHR.done()、jqXHR.fail()、および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/

18
Ed DeGagne

この投稿は役に立ちます。

フォーラムリンク

要するに次のとおりです。

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

と同等です:

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

ここでの問題は、$.ajax()が機能していないということではありません。Ajaxリクエストでtypeパラメーターを設定しておらず、デフォルトでGETリクエストになっているためです。データはgetのクエリ文字列を介して送信され、バックエンドがそれらをpostパラメーターとして予期している場合、それらを読み取りません。

_$.post_は、単にtypeが設定された$.ajax()の呼び出しです。 docs を読むと、$.ajax()が上記のGETにデフォルト設定されていることがわかります。

JQueryドキュメントの jQuery.post ページにアクセスすると、タイプが設定された$ .ajaxリクエストが表示されます。もう一度ドキュメントを読んでください。

45
epascarello

これをデータパラメーターとして指定していますか? $.postは、単に$.ajaxこれは以下を期待しています。

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

補完的なものとして、受け入れられた答えでは、「$。ajaxメソッドのdata paramは、$。postメソッドとは異なることを行います。正確には何がわからないが、違いがあります

使用してみてください:

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

それ以外の場合、jsonオブジェクトはペイロードにURLエンコードされた文字列として挿入されます。

2
spilote