0

私はajaxでjavascript変数を取得しようとしています(そして最終的にphpに取得します)。私はいくつかのことを試しました。ユーザーが変更するとすぐにJqueryレンジスライダーの値を取得しようとしています(後で値を保存するため)。これはJavaScriptです:

$("#slider").bind("userValuesChanged", function(e, data){
  console.log( + data.values.min );
});

最小スライダーを変更するとすぐに、ログは正しい値を出力しています。今、私はこの userValuesChanged を ajax で取得しようとしています:

  $.ajax({
   type: "GET",
   dataType: "json",
   url: "test.php",
   data: "{userValuesChanged}",
   async: false,
   success: function(data){
     alert(data);
     return true;
   }
 });

初めてajaxを使用するので、これは機能していません。データタグに正しい値を書き込む方法がわかりません。userValuesChanged を取得するには? または特定の + data.values.minv 値?

4

2 に答える 2

2

あなたのajax呼び出しでは、文字列を送信しているだけです"{userValuesChanged}"

新しい値を送信する場合は、オブジェクトで指定します。

$("#slider").bind("userValuesChanged", function (e, data) {
    $.ajax({
        type: "GET",
        dataType: "json",
        url: "test.php",
        data: { minValue: data.values.min },
        async: false,
        success: function (data) {
            alert(data);
            return true;
        }
    });
});

上記の重要なビットは次のとおりです。

data: { minValue: data.values.min },

...これは、スクローラーから受け取っminValueたの値に設定されたというプロパティを持つオブジェクトを作成します。data.values.minサーバー側スクリプトは、 というフィールドを探しますminValue。(当然、 の他の値も必要なdata.values場合は、それらも含めることができます。)


ただし、スライダーが変わるたびにそれを行うのは少し大変かもしれません。値が変化しなくなったときにイベントが1 回userValuesChangedだけ発生する場合、上記は問題ありません。ユーザーがスクローラーを動かしているときに継続的に起動すると、多くの呼び出しがトリガーされるため、良くありません。ajax

その場合 (ユーザーが値を変更すると繰り返し発生する場合)、ユーザーが変更をやめたときに別のイベントを提供するかどうかを確認します。

そうでない場合は、代わりにレート制限できます。必要に応じて、次のようにします。

$("#slider").bind("userValuesChanged", function (e, data) {
    saveNewValues(data.values.min);
});

var pendingSaveTimer = 0;
function saveNewValues(minValue) {
    // cancel any previous save we have pending
    clearTimeout(pendingSaveTimer);
    pendingSaveTimer = 0;

    // Schedule saving the new value in half a second
    pendingTimer = setTimeout(function() {
        // Clear our timer var
        pendingTimer = 0;

        // Do it
        $.ajax({
            type: "GET",
            dataType: "json",
            url: "test.php",
            data: { minValue: minValue },
            async: false,
            success: function (data) {
                // Do something here if needed
            }
        });
    }, 500); // 500 = 500 milliseconds = half a second
}

値を保存する前に 0.5 秒待機し、その 0.5 秒以内に新しい値が入ってくると、その保存をキャンセルします。

于 2013-07-04T10:59:16.070 に答える
0

のようにしてみてください

$.ajax({
     type: "GET",
     dataType: "json",
     url: "test.php",
     data: {userValuesChanged:userValuesChanged},
     async: false,
     success: function(data){
           alert(data);
          return true;
      }
 });

{key : value}ajaxを介してデータを送信する間、データは次のような形式にする必要があります

于 2013-07-04T10:55:37.557 に答える