Php 使用ajax获取javascript变量

Php 使用ajax获取javascript变量,php,javascript,ajax,Php,Javascript,Ajax,我正在尝试使用ajax获取javascript变量(并最终将其转换为php)。 我试过几种方法。我试图在用户更改Jquery范围滑块时立即获取其值(以便稍后保存值)。这是javascript: $("#slider").bind("userValuesChanged", function(e, data){ console.log( + data.values.min ); }); 只要我更改最小滑块,日志就会输出正确的值。 现在,我正在尝试使用ajax更改此用户值: $.ajax({

我正在尝试使用ajax获取javascript变量(并最终将其转换为php)。 我试过几种方法。我试图在用户更改Jquery范围滑块时立即获取其值(以便稍后保存值)。这是javascript:

$("#slider").bind("userValuesChanged", function(e, data){
  console.log( + data.values.min );
});
只要我更改最小滑块,日志就会输出正确的值。 现在,我正在尝试使用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值?

试试看

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

数据应该类似于
{key:value}
格式当您在
ajax
调用中通过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
的其他值,也可以将其包括在内。)


不过,每次滑块改变时这样做可能有点过分。如果当值停止更改时,
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
}

在保存值之前等待半秒钟,如果在这半秒钟内出现新值,则会取消保存。

您应该提到,语法是{key:value}:D,因为在这种情况下,它将变成{1:1},每次更改都会更改,因此无法真正知道将向服务器发送什么:请注意{key:value}该值被解析为变量名,密钥以明文形式发送。这有点违反直觉(或者在我第一次开始使用这个东西的时候是这样)。我已经很久没有使用AJAX了,但是这些键不需要被引用吗?对不起,如果我wrong@Gautam3164wasnt me mate只建议编辑,没有否决。任何键和值都不能没有引号。如果页面运行时间过长或internet连接速度慢,间隔500可能也可能会阻塞浏览器。@Daghostmanditrov:为什么会这样做?这不是投票或其他什么。我们在这里所做的是避免在值在短时间内多次更改时执行任何操作,很可能是这样,然后在值停止更改后半秒执行一次调用。我认为没有必要使用计时器,可以在.mouseup()上触发自定义事件,cuz是指该值在短期内(或至少在理论上)不会被修改的时间。随着计时器的使用,将出现不必要的请求,这些请求包含相同的数据,而不仅仅是扩展我的知识:)@daghostmanditrov:我不知道特定滚动条的事件。当然,使用最终的“更改”事件会更好。但我不想让人们觉得上述内容对浏览器来说是一种负担。事实并非如此。通过
setTimeout
计划某件事情的速度非常快,如有必要,可以稍后取消。同样,当值停止更改时,实际的
ajax
调用只发生一次。@daghostminditrov:实际上,名称
userValuesChanged
可能表明当用户完成更改时,它只执行了一次。:-)希望如此。我已经更新了答案,以澄清任何情况。