1

私が見てきたことから、JSONの要点を見逃しているかどうかはわかりません。チュートリアル、例、および質問には、JSON/AJAX を介して PHP にフォーム データを送信することは含まれません。

jQueryを使った例をたくさん見ますが、私はまだjQueryを学んでいません.

フォーム データを「収集」し、JSON 構文であると思われる文字列を処理して出力できます。

"{p1:{'lname':'adsfer','fname':'asdf','email':'ewrt','sex':'male'},p2:{'lname':'erty','fname':'erty','email':'erty','sex':'male'}}"

HTML

<form id="p1">
<h2>Add Person 1:</h3> 
Surname: <input type='text' name='lname' value='' ><br>
First Name:<input type='text' name='fname' value='' ><br>
Email: <input type='email' name='email' value=''><br>
Sex:<select name='sex'><option></option><option value='male'>Male</option><option value='female'>Female</option></select> 
</form> 

<form id="p2">
<h2>Add Person 2:</h3> 
Surname: <input type='text' name='lname' value='' ><br>
First Name:<input type='text' name='fname' value='' ><br>
Email: <input type='email' name='email' value=''><br>
Sex:<select name='sex'><option></option><option value='male'>Male</option><option value='female'>Female</option></select> 
</form>
<button onclick='submit_forms()'>Next</button> 

Javascript

function submit_forms(){
    var div = "content";
    var url = "contract.php";
    var forms = document.forms;
    var txt = "{";
    for(var i = 0 ;i<forms.length;i++){
        txt += forms[i].id + ':{';
        for(var n=0;n<forms[0].length;n++){
            txt += "'" + forms[i][n].name + "':'" + forms[i][n].value +"',";
        }
        txt = txt.substring(0,txt.length-1);
        txt += '},';
    }  
        txt = txt.substring(0,txt.length-1);
        txt +='}';
    txt = JSON.stringify(txt);
   alert(txt)
   post_JSON_PHP(txt,div,url);
   }

function post_JSON_PHP(vars,div,url){
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById(div).innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("POST",url,true);
    xmlhttp.setRequestHeader("Content-type", "application/JSON");
    xmlhttp.send(vars);
}

PHP

$json = json_decode($_POST['p1']);
var_dump($json);

PHP は Notice: Undefined index: p1 for line and NULL で応答します。

構文が間違っているだけですか、それとも完全に間違った方向に進んでいますか?

4

4 に答える 4

0

コンテンツ タイプが JSON に設定されている場合、PHP ページの POST データが提供されないため、$_POST で取得できないことを知りませんでした。

javascriptからstringify関数を削除した後、このPHPコードを使用するとうまくいきました

$json = json_decode(file_get_contents('php://input'),true);
echo $json['p1']['fname'];
于 2013-08-13T05:26:55.370 に答える
0

他の人に役立つ場合に備えて、上記のコードは JSON テキスト文字列を作成していましたが、制限があることがわかりました。

代わりに、JavaScript オブジェクトを作成し、JSON.stringify 関数を使用してそのオブジェクトを JSON に変換しました。

このスクリプトは、フォームを修正しても機能し、同じ名前のフォームの配列を処理します。

無限に調査した結果、同じことをさらに多く、おそらくよりエレガントに行う jQuery 関数があることがわかりました。ただし、あなたが私のようで、まだ jQuery を学んでいない場合は、あなたはこれが便利だと思うかもしれません

function submit_forms(){
    var div = "content";    //for AJAX call
    var url = "process.php";    //for AJAX call
    var form = document.forms;
    var ppl = {};
    for(var i = 0;i<form.length;i++){
        if (ppl[form[i].name]){
            ppl[form[i].name].push({});
        } else {
            ppl[form[i].name] = [{}];
        }
        var index = ppl[form[i].name].length-1;
        for (var n=0;n<form[i].length;n++){
            ppl[form[i].name][index][form[i][n].name] = form[i][n].value;
        }
    }
    console.log(ppl);
    var vars = JSON.stringify(ppl);
    ajax_json(vars,div,url)

} 
于 2013-08-16T05:11:08.667 に答える