getJSONを使用して、postメソッドでデータを送信する方法


107

私は上記の方法を使用しています&それはURLの1つのパラメーターでうまく機能します。

たとえばStudents/getstud/1、コントローラ/アクション/パラメータの形式が適用される場所。

これで、2つのパラメーターを受け入れてJSONオブジェクトを返す、Studentsコントローラーにアクションがあります。

では、$.getJSON()postメソッドを使用してデータを投稿するにはどうすればよいですか?

同様の方法も受け入れられます。

ポイントは、AJAXでコントローラーのアクションを呼び出すことです。


4
getgetJSON手段GETを使用して、いくつかのJSONを取得します。
Majid Fouladpour 2012

1
@Majid Fouladpourこの質問をしたとき、私はそれを知らなかった..!
Vikas 2012

回答:


216

$ .getJSON()メソッドは、POSTではなくHTTP GETを実行します。$ .post()を使用する必要があります

$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
}, "json");

その呼び出しでdataToBeSentは、何でもかまいませんが、htmlフォームのコンテンツを送信している場合は、serializeメソッドを使用してフォームからPOSTのデータを作成できます。

var dataToBeSent = $("form").serialize();

7
$ .getJSONサポートJsonp(クロスドメインアクセス)を追加したいだけですが、残念ながら$ .postはサポートしていません。
トーマス

2
実際、.getJSON()は2つの方法でクロスドメインアクセスをサポートしています。JSONP。GETまたはPOSTではなく、スクリプトインジェクションを使用します。CORS-と.post()もCORSをサポートしています。ただし、CORSではサーバーがそれをサポートする必要がありますが、JSONPはサポートしません。
ヒッピートレイル

2
真実ではありません。JSONPには、コールバックパラメータを解析するためのサーバーサポートも必要です。
Shrulik 2013年

上記の関数を使用しているときに、jsonオブジェクトの代わりに文字列オブジェクトを受け取っています。
Pratik Singhal

13

これは私の「一行」の解決策です:

$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }

jsonpおよびPOSTメソッドを使用するために、この関数は「コールバック」GETパラメータをURLに追加します。これはそれを使用する方法です:

$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

サーバーは、コールバックGETパラメーターを処理し、json文字列を次のように返すように準備する必要があります。

jsonp000000 ({"name":"John", "age": 25});

ここで、「jsonp000000」はコールバックGET値です。

PHPでは、実装は次のようになります。

print_r($_GET['callback']."(".json_encode($myarr).");");

私はいくつかのクロスドメインテストを行いましたが、うまくいくようです。まだもっとテストが必要です。


1
POSTの最大サイズを再定義できる一方で、これによってGETの制限が回避されることはありません。
認知症

なぜ追加したの?callbackですか?URLで?そのため、コールバックは呼び出されません。私も追加しましたJSON.stringify(data)。+1、役立つ投稿!
IonicăBizău

@IonicăBizău:ありがとう。オブジェクトを返すには、URLに「コールバック」パラメーターを追加する必要があり、サーバーはJQueryによって生成された同じオブジェクト名を返す必要があります。:私はまた、getJSONのオーバーライド機能()を使用jQuery.getJSON = function(url, data, func) { return $.get(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
レペ

7

これらの行を<script>(jQueryがロードされた後、何かを投稿する前のどこかに)追加するだけです。

$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}

(一部/すべて)を交換$.getJSONして$.postJSON、お楽しみください!

と同じJavascriptコールバック関数を使用できます$.getJSON。サーバー側の変更は必要ありません。(まあ、私は常に使用することをお勧め$_REQUESTPHPで。http://php.net/manual/en/reserved.variables.request.php_REQUEST $の中で、1が最も速いです$ _GETや$ _POSTを?

これは、@ lepeのソリューションよりも簡単です。


これは、通常getJSONに適用できるdone()およびfail()メソッドでは機能しませんでした。
HackWeight

3

getJSONを実行するコードがありました。単にポストに置き換えただけです。驚いたことに、それはうまくいった

   $.post("@Url.Action("Command")", { id: id, xml: xml })
      .done(function (response) {
           // stuff
        })
        .fail(function (jqxhr, textStatus, error) {
           // stuff
        });



    [HttpPost]
    public JsonResult Command(int id, string xml)
    {
          // stuff
    } 

3

私は単に投稿とifを使用しました:

data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
    .done(function (response) {
        if (response instanceof Object)
            var json = response;
        else
            var json = $.parseJSON(response);
        // console.log(response);
        // console.log(json);
        jsonToDom(json);
        if (json.reload != undefined && json.reload)
            location.reload();
        $("body").delay(1000).css("cursor", "default");
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log("Request Failed: " + err);
        alert("Fehler!");
    });

1

$.getJSON()AJAXリクエストを送信し、JSONデータをレスポンスとして取得するのに非常に便利です。残念ながら、jQueryのドキュメントには、という名前の姉妹関数がありません$.postJSON()。なぜそれを使用$.getJSON()してそれで終わらせないのですか?まあ、おそらくあなたは大量のデータを送信したいでしょう、あるいは私の場合、IE7は単にGETリクエストで正しく動作したくありません。

確かに、現在$.postJSON()メソッドはありませんが、$.post()関数に4番目のパラメーター(タイプ)を指定することで同じことを実現できます。

私のコードは次のようになりました:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');

-8

パラメータが2つしかない場合、これを行うことができます。

$.getJSON('/url-you-are-posting-to',data,function(result){

    //do something useful with returned result//
    result.variable-in-result;
});

5
私はこれが尋ねられたことに対する答えではないと思います。
Harmeet Singh 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.