如何使用AJAX get请求正确传递参数

时间:2014-06-13 14:37:26

标签: jquery

我正在以这种方式制作一个AJAX get请求

$(document).on("click", ".topp", function () 
{
 var id_attr_val = $(this).attr("id");
 alert(id_attr_val);
 $.ajax({
            type: 'GET',
            url: 'http://hostip:8080/OrderSnacks/oms/toppings',
            jsonpCallback: 'jsonCallback',
            dataType: 'jsonp',
            data : "topping="+id_attr_val+"",
            jsonp: false,
            success: function (response) {
             console.log(response);
            },
            error: function (e) {
                $("#divResult").html("WebSerivce unreachable");
            }
        });
});

警报值显示为59,但是当我在控制台中观察时,它以这种方式拨打电话

http://hostip:8080/OrderSnacks/oms/toppings?topping=59&_=1402670107061

你能否告诉我如何发送59,而不是那些额外的字符?

3 个答案:

答案 0 :(得分:1)

检查服务器脚本中的topping值,您会发现它已正确设置为59.

您看到的额外字符是第二个变量,名为_,其值为1402670107061。您可以通过&字符看到这一点,该字符用于分隔多个GET参数。

至于这个_变量是什么,它是jQuery的缓存清除,以确保请求总是发送到服务器而不是浏览器的缓存。使用true时默认为dataType: jsonp。请参阅Who Add "_" Single Underscore Query Parameter?http://api.jquery.com/jQuery.ajax/缓存参数。如果您想要删除它并允许缓存结果,请在AJAX选项上设置cache: true

答案 1 :(得分:1)

当您使用toppings的值时,您当前的代码仍然有效,因为&分隔了两个不同的参数。

查看了jquery文档后,我发现在ajax选项中设置cache:true会删除_参数。

然而,你应该考虑是否真的想要允许缓存而不是仅仅删除它。我不知道你的项目的范围,所以你要弄清楚。

另外,如果你想重新格式化你的ajax,你有两个选择。

url: 'http://hostip:8080/OrderSnacks/oms/toppings',

变为

url: 'http://hostip:8080/OrderSnacks/oms/toppings?topping=' + id_attr_val,

并删除数据记录

data : "topping="+id_attr_val+"",

变为

data : {topping:id_attr_val},

答案 2 :(得分:1)

要删除'您必须在&_=1402670107061请求中设置以下ajax部分:

cache: true,

而且,是的,你仍然可以使用data: {topping: id_attr_val },

  

缓存 (默认值:true,false,数据类型为'脚本'和' jsonp')   类型:布尔值   如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是将" _ = {timestamp}" 附加到GET参数。其他类型的请求不需要该参数,但在IE8中,当对已经由GET请求的URL进行POST时,该参数除外。