ajax订单支付,提示订单过期 (传递data为json格式)

本文介绍了一个购物车系统中如何通过Ajax在提交订单前检查是否有已过期的促销商品。前端使用JavaScript获取选中的商品ID,并发送请求到后端。后端则通过查询数据库来验证这些商品是否仍然处于促销状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前台页面

<script>
			function ordering(shopid){

			var array=new Array();
			$("input[name='myid']").each(

					function(){
						if($(this).val()){
						array.push($(this).val());
						}

					}

				)
				
				
				flag= 1;
				$.ajax({ 
					type:'get',
                                        async : false,
					url: "{:U('checkcartAjax')}", 
					dataType: "json",
					data:"id="+array,									
					success: function(msg){
                                            //alert(msg);
                                            //alert(msg.msgid);
											//alert(msg.html);
											
                                            if(msg.msgid=='1004'){
                                                 
						$("#jian2").html("促销商品:"+msg.html+' 已结束')
						$("#jian2").css("display",'block');
							function times(){
								$("#jian2").css("display",'none');
								clearInterval(timer); 
							 }
						 timer=setInterval(times,3000); 
                                            flag= 0;                            
                                            }      
											
						//location.reload();
						
						
					}
				}); 
				
				
				if(flag == 1){
					if(array.length >0){
					//window.location.href="index.php?s=/addon/WeiSite/WeiSite/orderlist/id/"+array;
					}else{
						alert('请选择商品');
					}
				
				}
				

				 
			}
			
			function js_method(){
				javascript:void(0);
				return false;
			}
		</script>
        <div class="pull-right qjs_right">
        	<a href="javascript:ordering()" >去结算</a>
        </div>


 后台

	//ajax 购物车提交前进行判断是否 存在过期促销商品
    public function checkcartAjax(){
    	//商品促销  '$orderid'  'ORDER94490270'
	
			$id = I('id');
			$orderid=explode(',',$id); 
				$shop_list = array();
				//var_dump($orderid);

				foreach($orderid as $val){
					if($val){
						$shop_list[]=M('shopp_cart')->where('id='.$val)->find();						
					}					
				}

				//var_dump($shop_list);die();
				if($shop_list){
					foreach($shop_list as $key=>$val){
						$specialPrice=M('goodsshop')->where('id='.$val['shopid'])->getField('promotion_id');
						$goodsname = M('goodsshop')->where('id='.$val['shopid'])->getField('goods_name');
						//var_dump(M('goodsshop')->getLastSql());die();
						//var_dump($specialPrice);die();
						if($specialPrice!='0'){
							$promo_state = M('goodspromotion')->where('id='.$specialPrice)->getField('state');				
							//var_dump($promo_state);die();
							
							if($promo_state =='2' ){
								
								echo json_encode(array('msgid'=>'1004','html'=>$goodsname));exit();
								
							}
						}
					}
				}
				//echo json_encode(array('msgid'=>'1004','html'=>'8888'));
				
			
    }


### HTTP Bad Request BUTTON_DATA_INVALID 错误分析 当遇到 `HTTP Bad Request` 的 `BUTTON_DATA_INVALID` 错误时,通常意味着服务器端接收到的数据不符合预期格式或验证失败。具体原因可能涉及客户端发送请求的方式以及数据的有效性。 #### 可能的原因 1. **请求体格式不正确** 如果 POST 请求的内容类型设置为 `application/json` 而实际提交的数据并非有效的 JSON 格式,则可能导致此错误。确保所传递的参数遵循 API 文档规定的结构[^1]。 2. **缺少必要的表单字段** 对于某些接口而言,即使采用 GET 或者 POST 方法,如果未提供必需的查询字符串参数或是表单项,同样会触发此类异常响应。特别是涉及到按钮点击事件处理的情况下,务必确认所有依赖项均已正确定义并传输给服务端。 3. **Content-Type 不匹配** 当 Content-Type 设置不当(例如对于 HTML 表单应使用 `application/x-www-form-urlencoded`),这可能会引起解析上的问题进而造成请求被拒绝。因此,在构建 AJAX 请求或其他异步通信机制时要特别注意这一点。 4. **CSRF Token 验证失败** 许多现代 Web 应用程序为了防止跨站请求伪造攻击(CSRF),会在每次交互过程中附加一个随机生成的一次性令牌(Token)。假如这个 token 缺失或者过期失效的话,也有可能引发类似的报错现象。 #### 解决方案建议 针对上述提到的各种可能性,可以采取如下措施来排查和解决问题: - 审查前端代码逻辑,保证所有的输入控件都已初始化完毕再发起网络请求; - 使用开发者工具(F12)中的 Network 面板查看具体的请求详情,对比官方文档检查是否存在遗漏的关键属性; - 尝试简化测试用例,仅保留最基本的几个参数组合来进行调试直到能够成功为止; - 若怀疑是由于安全策略引起的冲突,可尝试临时关闭浏览器插件/扩展功能后再重试一次; 通过以上手段逐步缩小范围最终定位到根本所在,并据此调整相应的实现细节即可有效规避该类问题的发生。 ```javascript // 示例:修正后的AJAX请求方式 $.ajax({ url: '/order/list.do', type: 'POST', // 或GET取决于API设计 contentType: "application/json", data: JSON.stringify({/* 正确填充所需参数 */}), success:function(response){ console.log('Request succeeded with JSON response'); }, error:function(xhr,status,errorThrown){ alert("Error:" + xhr.responseText); } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值