74

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

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

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

違いと、上記の代わりに何を使用できるかを知っている人はいます.serializeか?

4

7 に答える 7

89

このjqueryフォーラムスレッドはそれを要約しています:

$.postは POST リクエストの簡略な使用方法である$.ajaxため、この 2 つを使用することに大きな違いはありません。どちらも同じ基礎となるコードを使用して可能になります。$.get同様の原理で動作します。

—アディオスマニ

要するに、これは:

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

以下と同等です。

$.ajax({ 
  type: "POST", 
  url: "/ajax", 
  data: {"data": json} 
});
于 2012-10-10T13:07:51.697 に答える
51

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

$.post$.ajax()は、セットを使用した単なる呼び出しtypeです。ドキュメントを読むと、$.ajax()上記のようにデフォルトで GET になっていることがわかります。

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

于 2012-10-10T13:08:55.820 に答える
27

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

$.ajax メソッドの data パラメータは $.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/

于 2012-10-10T13:47:03.890 に答える
13

これをデータパラメータとして指定していますか。は、次のことを期待して$.postいる の省略形です。$.ajax

$.ajax({
    type : 'POST',
    url : url,
    data : data,
    success : success,
    dataType : dataType
});
于 2012-10-10T13:11:07.983 に答える
3

補足として、受け入れられた回答では、「$.ajax メソッドの data パラメータは $.post メソッドとは異なることを行いますが、正確にはわかりませんが、違いがあります

使ってみてください:

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

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

于 2016-04-12T20:51:38.783 に答える