У меня есть таблица базы данных, из которой я пытаюсь получить данные с помощью JQUERY AJAX. Когда моя первая страница загружается, она выполняет php-вызов таблицы и заполняет элемент формы выбора. - Это работает. Затем я хочу выбрать один из вариантов отправки формы и вернуть строку через Ajax. Раньше у меня сценарий работал только с файлами PHP, но у меня проблемы с его работой. При отправке формы мой URL меняется:

http://localhost/FINTAN/testertester.php?name=Specifics.

Я ничего не получаю обратно. Вдобавок, глядя на мою консоль, я получаю jquery not defined factory (jquery). Я могу найти нужную строку в моем jquery ui.js. Не уверен, что это проблема, или проблема возникла из-за моего кода. Я очистил кеш firefox, и из-за того, что у меня не было успешного вызова AJAX через метод jquery, я предполагаю, что это мой код.

Чтобы получить приведенный ниже код, я смешал и сопоставил книгу, онлайн-руководство и многие другие источники, и это не моя первая попытка. В идеале я хотел бы вывести строку таблицы. Тем не менее, просто заставить запрос работать и знать, что это не проблема конфликта или совместимости, я бы почувствовал себя лучше и не мешал, прежде чем я начну

   <script src="jquery/jquery-ui-1.11.2/jquery-ui.js"></script>
   <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

   <script>

   $(document).ready(function(){
       $("#btn").click(function(){
           var vname = $("#name").val;
       } 
   }
   $.post("addithandle1.php",
   {
       name:vname};

   function(response,status){   
       alert("recieved data-------*\n\nResponse : " + response 
               +"\n\nStatus : " + status);
   }
   }
   </script>
</head>
<body>  
    <?php
include "config.php";

if (mysqli_connect_errno($con))
{

}
else
{
  $result = mysqli_query($con, "SELECT * FROM script ");



     echo " <Form  method='post'> <label>Script :</label> <select id='name'  name='name' >";
}
    while($row = mysqli_fetch_array($result))
    {   

    echo "<option value = '".$row['scriptname']."'>".$row['scriptname']."</option>"; 
    } 
  echo "</select>";  
           echo "<button id='btn'  class='btn-search'>Load Script </button></form>";     
?>
</body></html>

Это мой файл PHP, из которого я пытаюсь извлечь

 <?php
include 'config.php';

$batchtype2 = $_POST['name'];


$batchtype2 = mysqli_real_escape_string($con,$batchtype2);
$sql = "SELECT * FROM script WHERE scriptname  = '".$batchtype2."' ";       


$result = mysqli_query($con,$sql);

$count=mysqli_num_rows($result);

if($count==0 ){
    echo "</br></br></br></br></br></br></br><p> No Matching results found</p>";
}

else{
    while($row = mysqli_fetch_array($result)) {

        echo '<tr><td>'.$row['scriptname'].'</td></tr>';
  echo '<tr><td>'.$row['scripthours'].'</td></tr>';
   echo '<tr><td>'.$row['scripttotal'].'</td></tr>';


 }
}
mysqli_close($con);
?>

Заранее благодарю за любую помощь

1
Creaven 4 Фев 2015 в 20:29

2 ответа

Лучший ответ

Внеся следующие исправления (у вас есть некоторые проблемы с синтаксисом, а также проблемы с использованием, которые должны быть обнаружены в консоли вашего браузера при загрузке этой страницы) в вашем JavaScript / jQuery, это будет работать так, как вы ожидаете -

Обязательно измените эту строку -

var vname = $("#name").val;

К этому -

var vname = $("#name").val(); // note the parentheses

В вашей функции -

$(document).ready(function(){
    $("#btn").click(function(e){
       e.preventDefault(); // prevent the default action of the click
           var vname = $("#name").val();
           $.post("addithandle1.php", {name:vname}, function(response, status) { // POST instead of GET
               // never use alert() for troubleshooting
               // output for AJAX must be in the callback for the AJAX function
               console.log("recieved data-------*\n\nResponse : " + response +"\n\nStatus : " + status);
               $('#table').html(response); // put response in div
        });
    });
});

Теперь $_POST['name'] должен правильно заполниться.

Чтобы таблица отображалась на вашей запрашивающей странице, сначала убедитесь, что ваш PHP полностью формирует таблицу.

Добавьте div на запрашивающую страницу и измените вызов AJAX выше, как показано.

<div id="table"></div>

Теперь, когда вы делаете запрос, div на запрашивающей странице будет обновляться с учетом того, что возвращается из сценария PHP.

1
Jay Blanchard 4 Фев 2015 в 19:18

В вашем сценарии есть несколько моментов.

Во-первых, убедитесь, что вы пишете хорошо структурированный код и все в нем не в том месте / не сломано.

У вас есть в $ (document) .ready (function () {только событие .click кнопки, но вы оставили запрос ajax снаружи, я предполагаю, что вы это сделали, поэтому он также сделает запрос ajax при загрузке первой страницы

Проблема в том, что теперь он будет делать это только при загрузке первой страницы, но не когда вы нажимаете кнопку, при нажатии кнопки вы получаете только значение имени.

Я рекомендую вам попробовать что-то вроде этого:

<script>

$(document).ready(function() {
    // bind button click and load data
   $("#btn").click(function(){
       loadData();
       return false; // prevent browser behaviour of the button that would submit the form
   }
   // load data for the first time
   loadData();
};

function loadData() {
    var vname = $("#name").val;
    $.post("addithandle1.php", { name:vname }, function(response, status) {
       alert("recieved data-------*\n\nResponse : " + response 
               +"\n\nStatus : " + status);
    });
}

</script>

Несколько примечаний:

  • Я бы рекомендовал всегда помещать код jquery внутри $ (document) .ready, поскольку это гарантирует, что jquery был загружен перед его запуском.
  • По умолчанию форма, имеющая кнопку отправки, которую вы нажимаете, получит форму, отправленную браузером, если вы используете ajax, вы должны предотвратить такое поведение либо в событии нажатия кнопки, либо в форме с onsubmit = "return false".
0
Alexandru Trandafir Catalin 4 Фев 2015 в 17:50