上記の方法を使用していますが、URLの1つのパラメーターでうまく機能します。
例えばStudents/getstud/1
コントローラー/アクション/パラメーター形式が適用される場所。
これで、Students Controllerに2つのパラメーターを受け入れてJSONオブジェクトを返すアクションができました。
それでは、postメソッドを使用して$.getJSON()
でデータを投稿するにはどうすればよいですか?
同様の方法も受け入れられます。
ポイントは、AJAXを使用してコントローラーのアクションを呼び出すことです。
$ .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();
これが私の「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).");");
いくつかのクロスドメインテストを行いましたが、うまくいくようです。ただし、さらにテストが必要です。
これらの行を<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.php 、 Among $ _REQUEST、 $ _GETと$ _POSTどちらが最速ですか? )
これは@lepeのソリューションよりも簡単です。
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
}
投稿と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!");
});
$.getJSON()
は、AJAXリクエストを送信し、JSONデータをレスポンスとして取得するのに非常に便利です。残念ながら、jQueryのドキュメントには、$.postJSON()
という名前の姉妹関数がありません。なぜ$.getJSON()
を使用して、それで終わらせないのですか?おそらく、あなたは大量のデータを送信したいかもしれませんし、私の場合、IE7はGETリクエストを適切に処理したくありません。
確かに、現在$.postJSON()
メソッドはありませんが、$.post()
関数で4番目のパラメーター(タイプ)を指定することで同じことを実現できます。
私のコードは次のように見えました。
$.post('script.php', data, function(response) {
// Do something with the request
}, 'json');