PHP переменные, которые были обновлены после POST и отражены в JS, остаются нулевыми - PullRequest
0 голосов
/ 10 марта 2019

У меня есть кнопка HTML, которая, когда пользователь нажимает ее, преобразует следующий POST (на ту же страницу issue.php):

var params = "Bloodtype=" + encodeURIComponent(Bloodtype);
var url = "issue.php?" +params;
var request = new XMLHttpRequest();
request.open("POST", url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.onreadystatechange = function() 
{
    if(request.readyState == 4 && request.status == 200) 
    {
        checkDoner();
    }
}
request.send(params);

Как только запрос сделан, PHP-код продолжает проверять соответствие базы данных - если есть совпадение, я устанавливаю переменную php isDoner = 1, иначе isDoner=0.

Функция checkDoner() выводит PHP var isDoner и проверяет его значение - и по этому значению мне нужно показать / скрыть определенный div в html-коде.

Я проверил все значения PHP var после записи - все они имеют значения, которые должны иметь - проблема в том, что когда я передаю их в JS, они всегда равны нулю.

Это функция checkDoner():

function checkDoner()
{
    var isDoner = "<?=json_encode($isDoner) ?>";
    if(isDoner == null)
    {
        console.log("In isDoner 1");
        document.getElementById('positiveAnswer').style.display = 'none';
        document.getElementById('negativeAnswer').style.display = 'none';
    }
    else if(isDoner == '0'){
        console.log("In isDoner 2,DONER :" + isDoner);
        document.getElementById('negativeAnswer').style.display = 'block';
    }
    else if(isDoner == '1'){
        console.log("In isDoner 3");
        document.getElementById("pName").innerHTML = "<? echo json_encode($doners['Name']) ?>";
        //$doners array is initiated to null and gets values after post
        document.getElementById("pId").innerHTML =  "<? echo json_encode($doners['Id'])?>";
        document.getElementById("pBloodtype").innerHTML = "<?echo json_encode($doners['Bloodtype'])?>";
         //document.getElementById("pName").innerHTML = <?=json_encode($doners['Name'])?>;
         //document.getElementById("pId").innerHTML = <?=json_encode($doners['Id'])?>;
        //I tried both ways
        document.getElementById('positiveAnswer').style.display = 'block';
    }
}

1 Ответ

0 голосов
/ 10 марта 2019

На странице Issue.php, как сказал Крис, вы можете определить, является ли запрос ajax или нет, с помощью заголовка или вы также можете сделать это, отправив параметр get 'ajaxRequest = 1'. И когда в $ _GET задано «ajaxRequest», вам нужно отобразить только объект json и выйти.

Ваш файл issue.php будет выглядеть примерно так

if(!empty($_GET["ajaxRequest"])) {
  $data = array();
  ..... your code to get insert values in $data ....
  ..... add $data["isDoner"] = YOUR VALUE .....
  ..... add $data["donors"] = YOUR ARRAY .....
  echo json_encode($data);
  exit();
}

Помните, что когда вы отправляете ajax-запрос, весь ваш php-код запускается на сервере и любые данные, которые вы выводите на экран, или любые данные, которые вы пишете вне блоков php ( <? Php </strong> ?> ), будет получен браузером, доступ к которому можно получить через «request.responseText», где запрос - это объект XMLHttpRequest.

Ваш JS должен выглядеть следующим образом

var params = "Bloodtype=" + encodeURIComponent(Bloodtype) + "&ajaxRequest=1";
var url = "issue.php?" +params;
var request = new XMLHttpRequest();
request.open("POST", url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.onreadystatechange = function() 
{
    if(request.readyState == 4 && request.status == 200) 
    {
        checkDoner(request.responseText);
    }
}
request.send(params);

function checkDoner(response)
{
    var isDoner = null, donors=null;
    try {
      response = JSON.parse(response);
      isDoner = response.isDoner;
      donors = response.donors;
    }
    catch(e){  }

    if(isDoner == null)
    {
        console.log("In isDoner 1");
        document.getElementById('positiveAnswer').style.display = 'none';
        document.getElementById('negativeAnswer').style.display = 'none';
    }
    else if(isDoner == '0'){
        console.log("In isDoner 2,DONER :" + isDoner);
        document.getElementById('negativeAnswer').style.display = 'block';
    }
    else if(isDoner == '1'){
        console.log("In isDoner 3");
        document.getElementById("pName").innerHTML = donors.Name;
        //$doners array is initiated to null and gets values after post
        document.getElementById("pId").innerHTML =  donors.Id;
        document.getElementById("pBloodtype").innerHTML = donors.Bloodtype;
         //document.getElementById("pName").innerHTML = donors.Name;
         //document.getElementById("pId").innerHTML = donors.Id;
        //I tried both ways
        document.getElementById('positiveAnswer').style.display = 'block';
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...