JQueryAjaxはPOSTではなくGETを送信しています


87

次のコードは、POSTHTTPリクエストの代わりにGETをトリガーします。

function AddToDatabase() {
  this.url = './api/add';
}

AddToDatabase.prototype.postData = function(dataToPost) {
$.ajax({
    type: "POST",
    url: this.url,
    data: dataToPost,
    context: this,
    success: this.onSuccess
  });
};


var AddToDatabase = new AddToDatabase();
data = {data: 'coucou'};
AddToDatabase.postData(data);

なぜ、そしてどうすればPOSTを取得できますか?


Google ChromeInspectとFirefoxInspectで、ブラウザがGETを送信していることがわかります。これはChromeからのものです:

リクエストURL:http:// localhost / SAMPLE-CODES / UPDATE%20MYSQL / api / add /リクエストメソッド:GETステータスコード:200OK


解決済み

'./api/add'というURLは、実際には './api/add/index.php'に投稿するためのものでした。'./api/add /index.php'または './api/add /'を呼び出すとPOSTリクエストが返されることがわかりました。

これは間違ったURLでしたが、何らかの理由で「.api / add /」へのGETリクエストが成功していました。


2
なぜそれがGETリクエストになると思いますか?
Viktor S.

1
Firefoxでネットパネルを開いた状態でFirefoxでajax呼び出しを実行しようとしましたか?
ファブリツィオカルデラン2012

2
テスト-これを実行してネットワークパネルを確認すると
Viktor S.

1
@ tucson-私がすでに書いたように-あなたの.htaccessファイルをチェックしてください。おそらく、書き換えではなくリダイレ​​クトを行います。基本的に、JSは問題ないことがわかります(URL './ api / add'のドットが混乱することを期待してください)。したがって、サーバーサイドの問題のように見えます。そして、あなたの質問の情報は特定の助けを与えるのに十分ではありません
Viktor S.

1
答えとしてソリューションを追加してください
Adam Lynch

回答:


101

MVCに関するいくつかの問題。何らかの理由で[HttPost]を削除すると、ajaxにPOSTを使用するように指示していても、期待どおりに機能します。

  • 使用する必要があることがわかりました

タイプ:「POST」

  • jQueryページの例では使用するように言われていますが

メソッド:「POST」

今ではPOSTです

しかし、ドキュメントを掘り下げた後、私はこれを見つけました。

ここに画像の説明を入力してください


6
これは私がちょうど抱えていた問題です。オプション名が1.9で変更されたことに気づいていませんでした。それは常に「方法」だと思っていた
ビルギャリソン

2
念のため、両方を含めても問題はありません。 { method : "POST", type: "POST" }
スコット

コンストラクターに必要なものを含めることはできますが、互換性のためにこれらの両方を含めることは実際には意味がありません。ほとんどの人は今ではとにかく1.11または2.1を使用するでしょう。これは、1.4.3または1.6.2からのアップグレード後に問題を引き起こすだけです
Piotr Kula

3
私は金曜日にこれを修正しようとして長い時間を費やし、古いフロントエンドを更新して新しいAPIを使用しました。どうもありがとうございます!
NobleUplift 2018年

31

私はこの問題を抱えていましたが、@ FAngleの提案によると、.htaccessが末尾のスラッシュを削除していたためで/ajax/foo/bar/あり、URLをに設定していました/ajax/foo/bar。リダイレクトにより、リクエストがPOSTからGETに変更されます。/を削除して問題を解決しました!


これにより、元の質問で述べた問題が正確に解決されました。私はWAMPを3.0.6にlaravelアプリホスティングよ
ILTERケーガンOCAL

9

URLは'./api/add'実際にはにリダイレクトされました'./api/add/index.php'。したがって、リダイレクト後の新しいリクエストがGET代わりに使用して送信したこの奇妙な副作用POST

解決

  • 完全なURLを使用する './api/add/index.php'
  • またはスラッシュを追加し'./api/add/'ます。

6

POSTがGETを送信している場所でもこの動作に気づきました。シナリオはかなりユニークですが、おそらくそれは誰かを助けるでしょう。

これは、ユーザーの役割の編集ページで発生していました。このページでは、役割がオンまたはオフになったときの即時アクションとしてajax(投稿)を使用していました。

また、ユーザーのクレームが更新されるように、ユーザーの役割情報が変更されるたびにユーザーを再認証(およびリダイレクト)するようにサーバーを構成しました。

残忍なサイクルは次のようになりました:

  1. 最初の役割の更新-POST-200成功

  2. 次の役割の更新-POST-302検出->リダイレクト(ChromeのネットワークモニターではなくFiddlerを使用するまでこれに気づきませんでした)

  3. (2)からのリダイレクト呼び出し(同じURL)-GET-404 Not Found(Postのみを許可したため)

  4. GOTO(1)

サーバーがajaxリクエストを検出したときに再認証/クレーム更新をバイパスするようにサーバーを変更することになりました(Acceptタイプに基づく)。


どうもありがとうございました!
machineaddict 2018

うわー!似たようなことに直面した。どうやら、私のコントローラーレベルでは、新しいコントローラーエンドポイントに含まれていないセッションパラメーターが必要であり、302を実行してからGETを実行していました。相棒、ありがとな。
Nimila Hiranya

5

使用dataType: 'jsonp'すると、リクエストがに変換されることがわかりましたGET。に変更しましdataType: 'json'た。からGETに変更しましたPOST


この動作が観察された理由はありますか?
SaurabhSarathe18年

@SaurabhSarathe — JSONPは、GETリクエストのみを生成できるスクリプト要素を生成することで機能します。
クエンティン

3

同様の問題が発生https://し、URLからハードコードを削除するとすぐに機能し始めました。

jQuery.ajax({
 type: "POST",
 url: "www.someurl.com",//instead of "https://www.someurl.com"
 data: { foo:"bar"},
 success: function(d){ console.log(d); },
 dataType: "JSONP"
});

これは、HTTPとHTTPSの間の問題のように聞こえます(つまり、www.someurl.comに有効な証明書がありません)
Alexis Wilke 2018年

2

私にとって、あなたのコードは問題ないように見えますが、確実にしたい場合は、$。ajaxの代わりに$ .postを使用できます。

$.post('ajax/test.html', function(data) {
 $('.result').html(data);
});

jqueryリンク:http//api.jquery.com/jQuery.post/


8
post$ .ajax({type: 'POST'})の省略形です
Viktor S.

はい。ただし、コードは見栄えがします。私がそれをテストしているとき、それはいくつかのポストリクエストを行います
Mr_DeLeTeD 2012

1

.htaccessファイルを確認するか、リクエストをリダイレクトする可能性のある他のものを検索してください


1

私は同じ問題を抱えていて、この質問を見つけましたが、答えは私の問題を解決しませんでした。私は最終的contentTypeにajaxリクエストのフィールドを削除することでそれを解決します。

contentType: "application/json",

1

この問題が発生しましたが、IISのURL書き換えモジュールであることが判明しました。

ASP.NETMVCとWebAPIを使用しています。ソーシャルネットワークが2つの異なるページと同じURLを表示しないように、小文字のURLを強制するルールを作成しました。

例えば:

" http://url.com/View/Something/123GuidIdSomething "

vs

" http://url.com/view/something/123guididsomething "

しかし、これはどういうわけか私のajaxリクエストを台無しにしていました。ルールを無効にすると、問題は解決しました。


0

非常によくある間違いは、送信としてボタンタイプを使用しており、フォームのメソッドを変更していないことです(デフォルトで取得されます)

ボタンタイプの送信を使用しないようにしてください。使用する場合は、フォームの方法を変更して投稿してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.