2013-07-24 34 views
-2

这是我的简单表单,其中包含workers名称,empno,empsal和doj(加入日期)。在这里,我通过XMLHttpRequest对象通过异步发送并更新myDiv中DOM中的requestTxt来发布此表单的值。如何将参数发布到php logincheck.php

在这里,当我传递的参数有点像这样的事情,我可以得到php echo $ empname中的值。 “是我的名字”;

var params = "empname="+myname+"&empno="+myno+"&empsal="+mysal+"&empdoj="+mydoj; 

但在同一时间,如果我把它作为一个对象,字符串化我不知道为什么它不打印

 var params = { 
     "empname":myname, 
     "empno":myno, 
     "empsal":mysal, 
     "empdoj":mydoj 
    };  
    var jsonText = JSON.stringify(params); 
    alert(jsonText); 

这里是我的代码 的index.html

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="windows-1252"> 
<title>Sample form</title> 
<style> 
table td{ 
    border-collapse:collapse; 
    border:1ps solid #000; 
} 
.hide{ 
    display:none; 
} 
</style> 
<script type="text/javascript" src="util.js"></script> 
</head> 
<body> 
<form name="sampleForm" id="sampleForm" action="javascript:return false;"> 
    <table width="40%"> 
     <tr> 
      <td>Employee Name:</td> 
      <td><input type="text" name="empname" id="empname"/></td> 
     </tr> 
     <tr> 
      <td>Employee No:</td> 
      <td><input type="text" name="empno" id="empno"/></td> 
     </tr> 
     <tr> 
      <td>Employee salary:</td> 
      <td><input type="text" name="empsal" id="empsal"/></td> 
     </tr> 
     <tr> 
      <td>Employee DOJ:</td> 
      <td><input type="text" name="empdoj" id="empdoj"/></td> 
     </tr> 
     <tr> 
      <td colspan="2"><input type="submit" name="submitBtn" id="submitBtn1" /></td> 
     </tr> 
    </table> 
    <div class="hide" id="myDiv"></div> 
      </form> 
      <script type="text/javascript"> 
      var subform = document.getElementById("sampleForm"); 
     subform.onsubmit = function(){  
    var myReq; 
    var uRLTxt = "loginCheck.php"; 
    var myname = document.getElementById("empname").value; 
    var myno = document.getElementById("empno").value; 
    var mysal = document.getElementById("empsal").value; 
    var mydoj = document.getElementById("empdoj").value; 
    /*var params = "empname="+myname+"&empno="+myno+"&empsal="+mysal+"&empdoj="+mydoj;  */ 
    var params = { 
     "empname":myname, 
     "empno":myno, 
     "empsal":mysal, 
     "empdoj":mydoj 
    };  
    var jsonText = JSON.stringify(params); 
    alert(jsonText); 
    myReq = new XMLHttpRequest(); 
    myReq.open("POST",uRLTxt,true); 
    myReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
    //myReq.setRequestHeader("Content-type", "application/JSON; charset=utf-8");   
    myReq.setRequestHeader("Content-length", jsonText.length); 
    //alert(jsonText.length); 
    myReq.setRequestHeader("Connection", "close"); 
    myReq.onreadystatechange = function() { 
     if(myReq.readyState == 4 && myReq.status == 200){ 
      var return_data = myReq.responseText; 
      console.log(return_data); 
      document.getElementById("myDiv").style.display = "block"; 
      document.getElementById("myDiv").innerHTML = return_data; 
     } 
    } 
    myReq.send(jsonText); 
    return false; 
     }; 
     </script> 
     </body> 
     </html> 

PHP代码 - loginCheck.php

<?php 
    $empname = isset($_REQUEST['empname']); 
    $empno = isset($_REQUEST['empno']); 
    $empsal = isset($_REQUEST['empsal']); 
    $empdoj = isset($_REQUEST['empdoj']); 
    echo $empname."is my name"; 
?> 
+0

您真的认为有人读过吗? – Sliq

+0

对不起,我现在已经清楚了代码。 – PCA

回答

3

, 你:这个

var params = { 
    "empname":myname, 
    "empno":myno, 
    "empsal":mysal, 
    "empdoj":mydoj 
};  
var jsonText = JSON.stringify(params); 
alert(jsonText); 

// Blah blah... 

myReq.send(jsonText); 

<?php 
    // Repeat for all variables 
    // This is an equivalent to: 
    // if (isset($_REQUEST['empname'])) { 
    //  $empname = $_REQUEST['empname']; 
    // } 
    // else { 
    //  $empname = ""; 
    // } 
    $empname = isset($_REQUEST['empname']) ? $_REQUEST['empname'] : ""; 

    echo "{$empname} is my name"; 
?> 

JavaScript中的PARAMS字符串,改变这种想要在send()方法中指定要发送的数据。

var params = { 
     "empname":myname, 
     "empno":myno, 
     "empsal":mysal, 
     "empdoj":mydoj 
    };  
    var jsonText = JSON.stringify(params); 
    myReq.send("totalJsonStr="+jsonText); 

使用json_decode()解码您的json字符串。将此添加到您的loginCheck.php中

<?php 
     if(isset($_POST["totalJsonStr"])) { 
     $jsonVal = json_decode($_POST["totalJsonStr"]); 
     //If you want empname 
     print $jsonVal->{'empname'} . " is my name"; } 
     else { die("No Data Found"); } 
    ?> 
+1

我一直在尝试这一些日子,这没有奏效。感谢raduns,现在它像魅力一样工作。 – PCA

+0

我很高兴它工作! – raduns

+0

我还注意到了一件事,当我将setRequestHeader改为application/json时,它说“找不到数据。myReqet.setRequestHeader(”Content-type“,”application/JSON; charset = utf-8“) – PCA

0

试试吧,

<script language="javascript" src="jquery-1.4.4.min.js"></script> 
    <script> 
var myname = document.getElementById("empname").value; 
var myno = document.getElementById("empno").value; 
var mysal = document.getElementById("empsal").value; 
var mydoj = document.getElementById("empdoj").value; 


var subform = document.getElementById("sampleForm"); 
     subform.onsubmit = function(){ 
    $.ajax({ 
    url: 'loginCheck.php', //This is the current doc 
    type: "POST", 
    dataType:'json', // add json datatype to get json 
    data:"empname=myname&empno=myno&empsal=mysal&empdoj=mydoj", 
    success: function(data){  alert(data);  }) 
    }, });  }; 
</script> 
+0

它正在与jQuery,但我需要一个正常的解决方案JavaScript XMLHttpRequest请求 – PCA

0

你的PHP是这样的:

<?php 
    $empname = isset($_REQUEST['empname']); 
    $empno = isset($_REQUEST['empno']); 
    $empsal = isset($_REQUEST['empsal']); 
    $empdoj = isset($_REQUEST['empdoj']); 
    echo $empname."is my name"; 
?> 

但函数isset()只返回true或false,具体取决于是否设置了变量。你的脚本应该是这样的:如果你想独自使用JavaScript

var params = { 
    "empname":myname, 
    "empno":myno, 
    "empsal":mysal, 
    "empdoj":mydoj 
}; 
var out = new Array(); 

for (key in params) { 
    out.push(key + "=" + encodeURI(params[key])); 
} 
var postText = out.join("&"); 
alert(postText); 

// Blah blah... 

myReq.send(postText); 
+0

我仍然获得empname的空字符串 – PCA

+0

看看更新的答案,您通过POST发送JSON,但您必须发送HTTP键值字符串(key1 = value1&key2 = value2&...)。 –