web-dev-qa-db-ja.com

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

上記の方法を使用していますが、URLの1つのパラメーターでうまく機能します。

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

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

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

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

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

102
Vikas

$ .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();
209
Erv Walter

これが私の「1行」ソリューションです。

$.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).");");

いくつかのクロスドメインテストを行いましたが、うまくいくようです。ただし、さらにテストが必要です。

13
lepe

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

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

(一部/すべて)$.getJSON$.postJSONに置き換えてお楽しみください!

$.getJSONと同じJavaScriptコールバック関数を使用できます。サーバー側の変更は必要ありません。 (まあ、PHPでは$_REQUESTを使用することを常にお勧めします。 http://php.net/manual/en/reserved.variables.request.phpAmong $ _REQUEST、 $ _GETと$ _POSTどちらが最速ですか?

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

5
Lerin Sonberg

GetJSONを実行するコードがありました。単純にpostに置き換えました。驚いたことに、うまくいった

   $.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!");
    });
2
Fusca Software

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

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

私のコードは次のように見えました。

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