新足迹

 找回密码
 注册

精华好帖回顾

· 征文活动- 琪琪成长之路(更新完毕)! (2008-5-3) 琪琪 · 那些阴晴圆缺的日子 - 杀我不死令我更强 (2009-12-15) 西关少爷
· 旧纸箱的利用(更新,第三个成果——化妆盒华丽登场~) (2009-7-13) edith921 · 在别人的故事里,流着自己的泪 - 23楼27楼34楼54楼完结更新♥ (2020-8-1) 带刺的芍药
Advertisement
Advertisement
查看: 1711|回复: 13

问个AJAX的小白问题 [复制链接]

发表于 2013-3-5 00:39 |显示全部楼层
此文章由 bc 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bc 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有一个网站,通过下面的请求来向shopping cart加东西:
http://www.mydomain.com/shop.aspx?pid=1&qty=1
所以一般的button我就使用window.location来完成。
但是有些产品是搭配的,所以一次得连着加两个以上,
所以我就用jquery的$.get连送两个不同产品ID的请求。
这样的做法应该是可以的,因为当时大家测试的时候
都是工作的,只是上线了一段时间,还没有真正有人
买过东西,今天好不容易有人要买东西了,我却被告知
网站不正常,东西加不到购物车里。自己试了一下,还
真是的。如果第一个加的是那个搭配的产品,就一定加
不进去,一旦先加了别的再加搭配的就可以,或者直接
在地址栏里把用$.get送出的地址输进去,也是可以加入
的。

所以我想问为什么$.get会失败?通过它发出的请求和用
window.location重定向有什么本质区别吗?
Advertisement
Advertisement

发表于 2013-3-5 03:01 |显示全部楼层
此文章由 happysee 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 happysee 所有!转贴必须注明作者、出处和本声明,并保持内容完整
两次.get的顺序重要吗?

发表于 2013-3-5 04:59 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
1. 一般来说,这样的功能都是用POST,GET只是获取资源用。当然这是convention, 不follow也没什么。
2. 听起来好像是javascript出错。用firebug看看出错原因吧

发表于 2013-3-5 09:59 |显示全部楼层
此文章由 bc 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bc 所有!转贴必须注明作者、出处和本声明,并保持内容完整
joerkky 发表于 2013-3-5 04:59
1. 一般来说,这样的功能都是用POST,GET只是获取资源用。当然这是convention, 不follow也没什么。
2. 听起 ...

谢谢你的回答。
1. 我是在一个CMS上实现shopping cart的,它的规定是使用GET来加商品。
2.基本上每个产品我做一个page,如果只要加一个商品,我用下面的代码实现(在button的onclick 里面调用):

function addToCartFun(prodId, quantity, ops) {
        <!-- alert("/store.aspx?productId=" + prodId + "&quantity=" + quantity); -->
        window.location = "/store.aspx?productId=" + prodId + "&quantity=" + quantity + "&options=" + ops
    }

如果是要加两个产品的page,则用下面不同的代码(在button的onclick中调用两次):
function addToCartFunAjax(prodId,quantity, ops)
{
  $.ajaxSetup({async: false});
  $.get("/store.aspx?productId=" + prodId + "&quantity=" + quantity + "&options=" + ops);
  $.ajaxSetup({async: true});  
}

我不解的是,用户要是先去加一个产品的page加了商品,那么再去加两个商品的page就有可能成功。如果一个新的
用户先去加两个商品的page,那是永远都加不进去的。一旦成功一次,以后就一直成功直到从浏览器中清除一切数据,
然后关闭重来。

发表于 2013-3-5 11:24 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
Ajax call是会被cache的。加上$.ajaxSetup({ cache: false });就好了

特殊贡献奖章

发表于 2013-3-5 13:50 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
先找出加不进去的原因是什么
另外,加2个产品为什么不把2个产品的信息一次发过去,要调用2次这个function?
Advertisement
Advertisement

发表于 2013-3-5 14:01 |显示全部楼层
此文章由 featheast 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 featheast 所有!转贴必须注明作者、出处和本声明,并保持内容完整
joerkky 发表于 2013-3-5 11:24
Ajax call是会被cache的。加上$.ajaxSetup({ cache: false });就好了

只有get会被cache,而且只有IE才会cache

发表于 2013-3-5 14:50 |显示全部楼层
此文章由 joerkky 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 joerkky 所有!转贴必须注明作者、出处和本声明,并保持内容完整
featheast 发表于 2013-3-5 14:01
只有get会被cache,而且只有IE才会cache

所有browser默认都会cache get. 所有browser都不会cache post.

发表于 2013-3-6 12:21 |显示全部楼层
此文章由 鱼羊鲜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 鱼羊鲜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果顺序重要,就等第一个执行完,再回调执行第二次
$.ajax({

        success:function(){
                $.ajax({

                });       
        }
});

发表于 2013-3-6 13:18 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
出了这类问题要用fiddler看http request,status code.

如果实在不能用post,  get的时候用datetime作一个timestamp的querystring, 来blast cache.

头像被屏蔽

禁止发言

发表于 2013-3-6 19:13 |显示全部楼层
此文章由 future2521 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 future2521 所有!转贴必须注明作者、出处和本声明,并保持内容完整
看天书的感觉真好。
Advertisement
Advertisement

发表于 2013-3-6 20:17 |显示全部楼层
此文章由 xliu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xliu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
not in context ,how to debug ?

发表于 2013-3-6 20:33 |显示全部楼层
此文章由 xliu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xliu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
加两个产品的话,为什么要call 两次。而且如果用get 也不要用ajax,只需要在你那个add_product function里面允许pass multiple products.这样一个url就搞定了

发表于 2013-3-7 16:27 |显示全部楼层
此文章由 鱼羊鲜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 鱼羊鲜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
楼主说了,是小白

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部