我正在以这种方式制作一个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,而不是那些额外的字符?
答案 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时,该参数除外。