getJSONを使用してpostメソッドでデータを送信するにはどうすればよいですか?
-
09-09-2019 - |
質問
私は上記の方法を使用していますが、URL 内の 1 つのパラメーターでうまく機能します。
例えば Students/getstud/1
ここでは、コントローラー/アクション/パラメーターの形式が適用されます。
これで、Students コントローラーに 2 つのパラメーターを受け取り、JSON オブジェクトを返すアクションが追加されました。
では、データを投稿するにはどうすればよいですか $.getJSON()
postメソッドを使用していますか?
同様の方法でもよい。
ポイントはコントローラーのアクションを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 フォームのコンテンツを送信する場合は、 シリアライズ フォームから POST 用のデータを作成するメソッド。
var dataToBeSent = $("form").serialize();
他のヒント
これが私の「1行」のソリューションです。
$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
JSONPを使用するため、およびPOSTメソッドでは、この機能は、URLに「コールバック」GETパラメータを追加します。これは、それを使用する方法です。
$.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 に、うち、$ _REQUEST 、$ _GET、もう1つは最速である$ _POSTですか)
これは、@レペのソリューションよりも簡単です。
私が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
}
私はポストとANを使用した場合:
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()
機能で四番目のパラメータ(タイプ)を指定することで、同じことを達成することができ、真であります
私のコードは次のように見えました
$.post('script.php', data, function(response) {
// Do something with the request
}, 'json');
あなただけの2つのパラメータを持っている場合は、あなたがこれを行うことができます:
$.getJSON('/url-you-are-posting-to',data,function(result){
//do something useful with returned result//
result.variable-in-result;
});