как поймать переменную post, когда я отправляю форму отправки php ajax - PullRequest
0 голосов
/ 05 октября 2011

Я публикую на этом форуме, потому что мне не удалось получить информацию, которую я разместил в форме отправки на мою страницу showidz.php.Я не знаю, как поймать мой $_POST["numversion"], сгенерировавший мой ajax-скрипт, в моем docversion.php.

, чтобы подвести итог, у меня есть страница формы docversion.php, где я ввожу имя документа и ловлюна той же странице «связанные» версии, которые возможны для этого документа, введены с использованием сценария ajax.Это отлично работает.

Моя проблема в том, что когда я нажимаю на кнопку подтверждения, чтобы выбросить информацию от docversion.php до showidz.php, я не могу поймать нумерацию.

Вот мой исходный код: docversion.php

<script type='text/javascript'>
  function getXhr(){
    var xhr = null; 
    if(window.XMLHttpRequest) // Firefox 
      xhr = new XMLHttpRequest(); 
    else 
      if(window.ActiveXObject) { // Internet Explorer 
        try {
          xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
      else { // XMLHttpRequest non supporté par le navigateur 
        alert("Browser not compatible with XMLHTTPRequest..."); 
        xhr = false; 
      } 
    return xhr;
  }

/**
* catch on click
*/
function go(){
  var xhr = getXhr();
  // do when we have the answer
  xhr.onreadystatechange = function(){
    // do if the server answer is OK
    if(xhr.readyState == 4 && xhr.status == 200){
      leselect = xhr.responseText;
      // use innerHTML
      document.getElementById('numeroversion').innerHTML = leselect;
    }
  }
  // post to rep_PhpAjax.php to have version
  xhr.open("POST","rep_PhpAjax.php",true);
  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  sel = document.getElementById('course');
  iddocument = sel.value;
  xhr.send("idDoc="+iddocument);
}
</script>

<form name="test1" method="post" action="showidz.php" >
  Nom du document <label>:</label><br>
  <input type="text" name="course" id="course" size="40" onclick='go()'/><br/>
  <label>Version</label>
  <div id='numeroversion' style='display:inline'>
    <select name='numeroversion'>
      <option value='-1'>Choose a version</option>
    </select>
  </div>
  <input type="submit" name="OK" value="OK">
</form>

rep_PhpAjax.php

<?php
  echo "<select name='numeroversion'>";
  if(isset($_POST["idDoc"])){
    $res = mysql_query("SELECT `NumeroVersion` 
                        FROM `version`, document 
                        WHERE document.idversion = version.idversion 
                           and document.NomDocument ='".$_POST["idDoc"]."'");
    while($row = mysql_fetch_assoc($res)){
      echo "<option value='".$row["idversion"]."'>".$row["NumeroVersion"]."</option>";
    }
  }
  echo "</select>";
?>

showidz.php: Страница с проблемой, где у меня не может быть нумерациикоторый был опубликован для docversion.php:

<?php
  $docname = $_POST["course"];
  $idversion = $_POST["numeroversion"];

  echo "$docname</br>";
  echo $idversion;
?>

Надеюсь, что кто-то может помочь мне в моей проблеме.

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Я переписал, что вы хотите сделать, используя jQuery . Вы можете увидеть это в действии здесь .

Структура папок:

site -+- displayDocument.php
      |- ajaxGetVersions.php
      |- ajaxGetVDocument.php
      |- queries.php

displayDocument.php:

<?php
require_once 'queries.php';
$documents = getDocuments();
?>

<form id="myform" method="post" action="" >
    <label for="documents">Choose a document</label>
    <select id="documents" name='documents[]'>
        <option value='0'>Choose a document</option>
        <?php foreach ($documents as $document) : ?>
            <option value='<?php echo $document ?>'><?php echo $document ?></option>
        <?php endforeach; ?>
    </select>
    <br/>

    <label for="versions">Version </label><span id="refreshVersions"></span>
    <select id="versions" name='versions[]'>

    </select>
    <br/>

    <input type="submit" name="OK" value="OK">
</form>
<div id="refreshDocument"></div>
<div id="document"></div>


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
    $("#documents").change(function() {
        $("#refreshVersions").text("refreshing...");
        $.post("ajaxGetVersions.php", { documentId: $(this).val() },
        function(data) {
            $("#versions").html(data);
            $("#refreshVersions").text("");
        });
    });

    $("#myform").submit(function(e) {
        $("#refreshDocument").text("refreshing...");
        $.post("ajaxGetDocument.php", { documentId: $("#documents").val(), version: $("#versions").val() },
        function(data) {
            $("#document").html(data);
            $("#refreshDocument").text("");
        });
        e.preventDefault();
    });
</script>

ajaxGetVersions:

<?php
require_once 'queries.php';

if (!isset($_POST['documentId'])) {
    die('missing post parameter: documentId');
}
$versions = getVersionsOfDocument($_POST['documentId']);
?>

<?php foreach ($versions as $version): ?>
    <option value='<?php echo $version ?>'><?php echo $version ?></option>
<?php endforeach; ?>

ajaxGetDocument:

if (!isset($_POST['documentId']) || !isset($_POST['version'])) {
    die('missing post parameter: documentId or version');
}
$doc = getDocument($_POST['documentId'], $_POST['version']);
?>
<h1><?php echo $doc["documentId"] ?></h1>
<h2><?php echo $doc["version"] ?></h2>
<h3><?php echo $doc["author"] ?></h3>
<p>
    <?php echo $doc["content"] ?>
</p>

queries.php:

<?php

// little database replace
$documents = array("Book1" => array("beta", "1.0", "1.1", "2.0"), "Book2" => array("1.0", "1.1"), "Book3" => array("beta"));

function getVersionsOfDocument($documentId) {
    // replace with database fetch
    global $documents;
    return $documents[$documentId];
}

function getDocuments() {
    // replace with database fetch
    global $documents;
    return array_keys($documents);
}

// get a document by id and version
function getDocument($documentId, $version) {
    //implement your own
    return array("documentId" => $documentId,
        "version" => $version,
        "author" => "...",
        "content" => "bla bla");
}
0 голосов
/ 05 октября 2011

В данных формы, отправляемых на showidz.php, похоже, нет ничего плохого, но проблема может заключаться в том, что вы вызываете этот ajax по щелчку.возможно, вам следует изменить

onclick="go();"

до

onkeyup="go();"

в docversion.php в строке 54, чтобы ajax вызывался каждый раз, когда вы набираете букву

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