Я не могу передать значение в сценарий PHP из JavaScript, используя JSON

0

Что я делаю неправильно? значение myid1 не принимается моим PHP-скриптом. Ниже приведен мой 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 как follows-

    <?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-идентификатор genno должен получить возвращаемое значение из PHP-кода, который является максимальным количеством отчетов, полученным из SQL-запроса. Как только я получаю переменную reportn с некоторым значением, я могу разобрать JSON и поместить его в идентификатор genno, но моя проблема правильно отправляет значение 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;
    }

Почему я запрашивал TWICE для ввода пользователем?

  • 0
    Что такое JSON, который толкают?
Теги:

1 ответ

0
Лучший ответ

У вас здесь проблема. 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'];
  • 0
    Теперь я получаю уведомление «Ошибка преобразования массива в строку» с $ myNewId. Не является ли $ myNewId единственным значением из массива $ contents с индексом myid1?
  • 0
    Ах. Я не видел, что вы назначили idnum1 для массива в JavaScript. Вы, вероятно, хотите var idnum1=idnum.split(":",1)[0] или var idnum1=idnum.split(":",1)[1] зависимости от того, что такое idnum.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню