Что я делаю неправильно? значение 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 для ввода пользователем?
У вас здесь проблема. 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'];
idnum1
для массива в JavaScript. Вы, вероятно, хотите var idnum1=idnum.split(":",1)[0]
или var idnum1=idnum.split(":",1)[1]
зависимости от того, что такое idnum.