1

私は、ユーザー データ (名前、性別、誕生日など) を収集し、Heroku でホストされている Rails アプリに送信する JavaScript (jQuery) アプリに取り組んでいます。Rails はリクエストから JSON を読み取り、新しいレコードを作成することになっています。私のコードは次のとおりです

params = {};
params.session_user = {};

var e = {
    "username"    :    localStorage.getItem("UN"),
    "gender"      :    gender,
    "birthdate"   :    birthdate,
    "session_id"  :    getSessionID(),
};
params.session_user = e;
$.post("https://***.herokuapp.com/session_users", params);

これは、Firefox、Chrome、Opera、および IE で機能しますが、Safari では機能しません。Safari は、POST 要求がキャンセルされ、データベースにレコードが作成されていないと言い続けます。

同様に、jQuery アプリは、アプリの各ページで focus_events と呼ばれる使用状況データも収集します。同じフォーマットを使用しましたが、

var e = {
    "timestamp"  : (new Date).toUTCString(),
    "focus_type" : type,
    "page"       : page_id,
    "problem_set": problem_set_id,
    "session_id" : getSessionID(),
  }
 params={};
 params.focus_event={};
 params.focus_event=e;
 $.post("https://***.herokuapp.com/focus_events",params);

これはほとんどの場合機能します。ただし、場合によっては、すべてのブラウザで POST リクエストがキャンセルされたものとして表示されることもあります。これとSafariの問題の両方について、どんな助けでも大歓迎です

4

1 に答える 1

0

私は問題を理解しました。後世のためにここに回答を投稿してください。$.post() (これは ajax() のラッパーです) は、デフォルトでリクエストを非同期に送信します。ユーザーが次のページのボタンをクリックしたときにリクエストが送信されていたため、ブラウザが新しいページをロードしたときにリクエストが切断されていました。私の $.post(...) を変更する

$.ajax({
    url    :    "https://***.herokuapp/controller_name",
    data   :    params,
    type   :    'POST';
    async  :    false,
});

美しく動作します。Safari の問題と focus_event の問題の両方を解決しました。同期的に送信する場合、およびサーバーの応答性によっては、リクエストが完了するまで辛抱強く待つ必要がある場合があることに注意してください。ブラウザーは、要求が完了するまで次のページをロードしません。

于 2013-09-18T15:12:08.730 に答える