-2

これは、従業員名、empno、empsal、および doj (入社日) を含む私の単純なフォームです。ここでは、このフォームの値を XMLHttpRequest オブジェクトを介して非同期に送信し、myDiv の DOM で requestTxt を更新して投稿しています。

ここで、このようなパラメーターを渡すと、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";
?>
4

3 に答える 3

3

javascriptだけで使いたい場合は、send()メソッドで送信したいデータを指定したい。

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

を使用してjson文字列をデコードしますjson_decode()。これを 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"); } 
    ?>
于 2013-07-24T15:48:58.777 に答える
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>
于 2013-07-24T11:01:18.577 に答える
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 のみを返します。スクリプトは次のようになります。

<?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 文字列については、次のように変更します。

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

// Blah blah...

myReq.send(jsonText);

このため:

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);
于 2013-07-24T11:26:12.950 に答える