2017-02-09 7 views
0

Использование AJAX для отправки информации о форме на страницу обработки php. Выполнение var_dump показывает, что значения входят как «0», даже если введенные числа не совпадают. Даже если значения указаны как «(int)», PHP7 возвращает «Нечисловое значение, встречающееся в /process_measurements.php в строке 20».«Нечетное значение, встречающееся» в запросе AJAX. Почему значения не фиксируются?

Если я явно укажу их следующим образом, ошибки PHP уходят, однако var_dump показывает, что они входят как 0s .. а не значения, введенные в форму, поэтому результат вычисления равен 0, независимо от введенных значений в виде.

$length = (int)$length; 
$width = (int)$width; 
$height = (int)$height; 

код, как это показывает «не числовое значение встречается» ошибка:

<?php 
    function is_ajax_request() { 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
     $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; 
    } 

    (int)$length = isset($_POST['length']) ? (int) $_POST['length'] : ''; 
    (int)$width = isset($_POST['width']) ? (int) $_POST['width'] : ''; 
    (int)$height = isset($_POST['height']) ? (int) $_POST['height'] : ''; 

    var_dump($length, $width, $height); 

    $volume = $length * $width * $height; 

    if(is_ajax_request()) { 
    echo $volume; 
    } else { 
    exit; 
    } 
?> 

HTML and JS for further clarification: 

    <div id="measurements"> 
     <p>Enter measurements below to determine the total volume.</p> 
     <form id="measurement-form" action="process_measurements.php" method="POST"> 
     Length: <input type="text" name="length" /><br /> 
     <br /> 
     Width: <input type="text" name="width" /><br /> 
     <br /> 
     Height: <input type="text" name="height" /><br /> 
     <br /> 
     <input id="html-submit" type="submit" value="Submit" /> 
     <input id="ajax-submit" type="button" value="Ajax Submit" /> 
     </form> 
    </div> 

<script> 
     var result_div = document.getElementById("result"); 
     var volume = document.getElementById("volume"); 

     function postResult(value) { 
     volume.innerHTML = value; 
     result_div.style.display = 'block'; 
     } 

     function clearResult() { 
     volume.innerHTML = ''; 
     result_div.style.display = 'none'; 
     } 

     // omits textareas, select-options, checkboxes, radio buttons 
     function gatherFormData(form) { 
     var inputs = form.getElementsByTagName('input'); 
     var array = []; 
     for (i = 0; i < inputs.length; i++) { 
      var inputNameValue = inputs[i].name + '=' + inputs[i].value; 
      array.push(inputNameValue); 
     } 
     return array.join('&'); 
     } 

     function calculateMeasurements() { 
     clearResult(); 

     var form = document.getElementById("measurement-form"); 
     var action = form.getAttribute("action"); 

     // gather form data 
     var form_data = gatherFormData(form); 

     var xhr = new XMLHttpRequest(); 
     xhr.open('POST', action, true); 
     // do not set content-type with FormData 
     //xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
     xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
     xhr.onreadystatechange = function() { 
      if(xhr.readyState == 4 && xhr.status == 200) { 
      var result = xhr.responseText; 
      console.log('Result: ' + result); 
      postResult(result); 
      } 
     }; 
     xhr.send(form_data); 
     } 

     var button = document.getElementById("ajax-submit"); 
     button.addEventListener("click", calculateMeasurements); 

    </script> 
+1

Прежде всего, если вы используете PHP 7.1, вы можете просто сделать '$ length = $ _POST ['length'] ?? ''; 'вместо использования' isset() '-метода. Однако вы имеете в виду, что 'var_dump()' возвращает 0? Если да, укажите 'var_dump ($ _ POST)' пожалуйста. – junkfoodjunkie

+0

Он возвращает 'array (0) {}' – lookininward

+0

Если это так, то ничего не отправляется на '$ _POST'- показывается HTML. И JS, возможно. – junkfoodjunkie

ответ

0

Похоже, вы должны раскомментировать следующие в коде:

xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 

Причина в противном случае кажется, что данные, отправленные с POST, не обрабатываются правильно, как вы ожидали. По крайней мере, с этим заголовком $ _POST содержит необходимые данные.

 Смежные вопросы

  • Нет связанных вопросов^_^