ajax传值 php获取不到

ajax传值 php获取不到

问题描述:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>车辆录入查询</title>
  <link rel="stylesheet" type="text/css" href="../css/style.css" />
  <style type="text/css">
      .btn{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;
                 background-color: #ff8400;color: #fff;display: inline-block;height: 28px;line-height: 28px;text-align: center;
                 width: 72px;transition: background-color 0.2s linear 0s;border:none;cursor:pointer;margin:0 0 5px;}
            .demo{width:700px;margin:0 auto}
            .btn:hover{background-color: #e95a00;text-decoration: none}
            .ul_pics li{float:left;width:160px;height:160px;border:1px solid #ddd;padding:2px;text-align: center;margin:0 5px 5px 0;}
            .ul_pics li .img{width: 160px;height: 140px;display: table-cell;vertical-align: middle;}
            .ul_pics li img{max-width: 160px;max-height: 140px;vertical-align: middle;}
            .progress{position:relative;padding: 1px; border-radius:3px; margin:60px 0 0 0;} 
            .bar {background-color: green; display:block; width:0%; height:20px; border-radius:3px; } 
            .percent{position:absolute; height:20px; display:inline-block;top:3px; left:2%; color:#fff }       
  </style>
<script type="text/javascript">
var $_GET = (function(){
    var url = window.document.location.href.toString();
    var u = url.split("?");
    if(typeof(u[1]) == "string"){
        u = u[1].split("&");
        var get = {};
        for(var i in u){
            var j = u[i].split("=");
            get[j[0]] = j[1];
        }
        return get;
    } else {
        return {};
    }
})();
</script>
 </head>
 <body>
 <?php $username=$_GET["username"];?>
<div id = "tabletitle"> 车辆管理系统</div><br/>
<div align="center" > <input class="btn" type="button"  id="bcaiwu" value="财务录入"/>&nbsp;&nbsp;&nbsp;&nbsp;<input class="btn" type="button"  id="bdel" value="删除车辆"/>&nbsp;&nbsp;&nbsp;&nbsp;<input class="btn" type="button"  id="addnew" value="新车录入"/>&nbsp;&nbsp;&nbsp;&nbsp;<input class="btn" type="button" id="bsearch" value="查询车辆"/>&nbsp;&nbsp;<input id="vin" type="text" size="18" maxlength="6" placeholder="车架号后六位"></div>
 <script src="../js/jquery.js"></script>
<script type="text/javascript">
 $("#addnew").on("click", function () {
	 var formData = new FormData();
	 var vin=$("#vin").val();
	 var username=$_GET["username"];
	 formData.append('vin',vin);
	 formData.append('username',username);
    $.ajax({
	  url:"mainadd.php",
      type:"POST",
	  traditional:true,
      data:formData,
	  processData:false,
      success:function () {
         window.location.href="mainadd.php";
      }
    })
  })
</script>
 </body>
</html>

后台PHP

<?php

$vin=$_POST["vin"];    

?>

错误:Warning: Undefined array key "vin" in

你的代码 mainadd.php 访问了两次, 
第一次是 $.ajax({ url:"mainadd.php",.... ajax请求,
第二次是 window.location.href="mainadd.php"; 页面跳转。

vin参数只在第一次ajax请求访问mainadd.php时传递。第二次页面跳转访问mainadd.php时没有传递参数。
你在浏览器中看到的Warning: Undefined array key "vin" 这个错误就是第二次页面跳转访问mainadd.php时的错误。

第一次ajax请求访问mainadd.php时应该没有错误。
你需要知道ajax请求是不会跳转页面的,
mainadd.php输出的内容要在success:函数中获取
      success:function (data) {
          alert("mainadd.php输出的内容:" + data);
       // window.location.href="mainadd.php"; 不要页面跳转 第二次页访问mainadd.php
      }

如果你需要跳转页面就不能用ajax,请使用<form>表单提交。
 

contentType: false,加上,我这里测试正常。你看下浏览器控制台报什么错误?

 mainadd.php

<?php
$vin=$_POST["vin"];    
echo $vin;
?>
 $("#addnew").on("click", function () {
	 var formData = new FormData();
	 var vin=$("#vin").val();
	 var username=$_GET["username"];
	 formData.append('vin',vin);
	 formData.append('username',username);
    $.ajax({
	  url:"mainadd.php",
      type:"POST",
	  traditional:true,
      data:formData,
	  processData:false,
      contentType: false,
      success:function (s) {
        alert('服务器返回'+s)
      }
    })

    return false;
  })

contentType设置成multipart/form-data

 

原因在:window.location.href="mainadd.php";

ajax本身没有问题,已经成功了,然后触发了跳转;

跳转页面本身没有post数据,当然会报错;