我无法使用JSON将值从javascript传递给PHP脚本


I am unable to pass on the value to a PHP script from a javascript using JSON

我做错了什么?我的PHP脚本不接受myid1的值。下面是我的Javascript代码,后面是我的PHP脚本。请帮忙。

Javascript代码

    function generaterepno(selectedid) {
     var idnum=selectedid;
     var idnum1=idnum.split(":",1);
     var text='[{"myid1":idnum1}]';
     var httpc = new XMLHttpRequest();
     var url = "reportnumber.php";
     httpc.open("POST", url, true); // sending as POST
     httpc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     httpc.setRequestHeader("Content-Length", text.length);
     httpc.onreadystatechange = function() { 
     if(httpc.readyState == 4 && httpc.status == 200) { 
      alert(httpc.responseText);
      var myArr = JSON.parse(httpc.responseText);             
     }
     httpc.send(text);
     document.getElementById('genno').value=idnum1;
    }

我的PHP如下-

    <?php
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    $mynewid=$_POST["myid1"];
    $mynewid=strip_tags($mynewid);
    include("inc_con.php");
    $myquery="SELECT MAX(report_number) AS mrepno FROM childreports WHERE child_id='$mynewid' ORDER BY report_number";
    $myresult=mysql_query($myquery);
    if(!$myresult) {
    $outp = '[{"reportn":"0"}]';
    echo ($outp);
    die('records do not exist');
    }
    $outp = "[";
    while($rm = mysql_fetch_array($myresult)) {
    $outp .= '{"reportn":"'.$rm["mrepno"].'"}';
    }
    $outp .="]";
    mysql_close($con);
    echo ($outp);
    ?>

我是JSON和Javascript的新手。我一直试图通过阅读自学。responseText的警报消息显示一条未定义myid1的通知。此外,在我的Javascript中,HTML id genno应该从PHP代码中获得返回值,即从SQL查询中获得的最大报告数。一旦我得到了带有某个值的reportn变量,我就可以对其进行JSON解析并将其放入genno-id中,但我的问题是将myid1值正确地发送到我的PHP脚本reportnumber.PHP。

有人能帮忙吗?谢谢

在Kyle的提示和大力帮助下,我对Javascript函数进行了如下更改,我的查询出现在下面的注释部分。

    function myFunction(arr) {
     var tempans = arr.reportn;
     var myans = 0;
     if(tempans.length == 0) {
     var asknum = prompt('Enter previous report number:');
     myans = parseInt(asknum)+1;
     } else {
     myans = parseInt(tempans)+1;
     }
     document.getElementById('genno').value=myans;
    }

为什么提示我两次用户输入?

这里有个问题。var text='[{"myid1":idnum1}]';不是有效的JSON,因为您正试图将变量idnum1放入字符串中。将其设置在对象中,然后使用JSON.stringify()将其转换为JSON会更容易。

var text = JSON.stringify({"myid1": idnum1});

在PHP中,您需要从请求主体对其进行解码,因为它不会在$_POST中设置。

$contents = json_decode(file_get_contents("php://input"), true);
$myNewId  = $contents['myid1'];