8

ボタンクリックに基づくajax投稿機能を実装しました。コードは

$.ajax({
    type: "POST",
    url: "includes/phpscripts?action=manage",
    data: {location: loc, lat: latitude, lon: longitude, heading: head, filename: file},
    success: function(){
      $("#panoInfo").html("<div id='message'></div>");
      $("#message").html("Valid Submission");
  }
});

URLを介して変数を表示したくないので、POSTメソッドを指定しました。しかし、そうです。

投稿前の私のテストURLは

http://localhost/JMCTour/buildtour.php

その後

http://localhost/JMCTour/buildtour.php?filename=1-prefix_blended_fused.jpg&location=Start+of+Tour&lat=43.682211&long=-70.450705&heading=100&submit=Save

なんで?

4

3 に答える 3

9

フォームタグにmethod='POST'

<form method='POST'>
...
</form>
于 2013-09-18T23:08:08.180 に答える
5

jQuery.ajax (私の強調)のドキュメントから:

データ

サーバーに送信されるデータ。まだ文字列でない場合は、クエリ文字列に変換されます。GETリクエストのURLに追加されます。この自動処理を防ぐには、processDataオプションを参照してください。オブジェクトはキー/値のペアである必要があります。値が配列の場合、jQueryは、従来の設定(以下で説明)の値に基づいて、同じキーで複数の値をシリアル化します。

したがって:

processDataBoolean

デフォルト:true

デフォルトでは、オブジェクト(技術的には文字列以外)としてデータオプションに渡されたデータは処理され、デフォルトのコンテンツタイプ「application/x-www-form-urlencoded」に適合するクエリ文字列に変換されます。 。DOMDocumentまたはその他の未処理のデータを送信する場合は、このオプションをfalseに設定します。

于 2012-06-06T19:47:12.910 に答える
5

質問の情報が不足しているため、ここではかなりの数の仮定を立てています。

おそらくあなたのフォームは次のようになります:

<form>
    <input type="text" name="lon" />
    <input type="text" name="lat" />
    <input type="text" name="heading" />
    <input type="file" name="image" />

    <input type="button" id="submit" value="Submit" />
</form>

すぐに問題が発生しました。ファイルの入力です。jQueryのajaxメソッドを使用してファイルをajax経由で送信するには、バックグラウンドで正しく処理する追加のプラグインを含めたり、コードを記述して非表示のiframeやその他のメソッド(html5?flash?)に送信したりする必要があります。

ファイル入力を無視すると、ここに元の問題があります。

$("#submit").click(function(){
    $.ajax(...);
});

ajaxオプションは無関係なので、省略しました。問題は、フォームのボタンがフォームの最後の入力であり、送信ボタンがないため、デフォルトのアクションを妨げない限り、送信ボタンのように機能してフォームを送信することです。そのデフォルトのアクションを妨げない場合、フォームにタイプを設定しなかったため、フォームはデフォルトのタイプ「GET」で送信されます。

クリックイベントのデフォルトのアクションを防ぐには、falseを返すか、次を使用します。event.preventDefault()

$("#submit").click(function(event){
    event.preventDefault();
    $.ajax(...);
});

ファイル入力の問題の修正は、おそらく他のいくつかのSOの質問ですでに回答されています。

于 2012-06-06T20:36:54.833 に答える