2013-05-07 4 views
0

Я до сих пор новичок в PHP и AJAX, но я думаю, что я немного разбираюсь в JavaScript и jQuery. Вот моя проблема: в моем пользовательском интерфейсе у меня есть поле ввода формы и кнопка ОК (которая не входит в форму). Каждый раз, когда пользователь нажимает кнопку ok, содержимое поля ввода плюс некоторые переменные сеанса должны быть отправлены на сервер через AJAX, чтобы страница не загружалась.

Вот мой JS-код:

$.post('api/someFile.php', 
    { 
    var1: nr1, 
    var2: nr3, 
    var3: nr3, 
    } 
); 

Вот мой PHP-код someFile.php:

<?php 
    // activate current session 
    session_start(); 

    // use php console for debugging  
    require_once('PhpConsole.php'); 
    PhpConsole::start(); 

    // get data from UI 
    $var1 = $_POST["var1"]; 
    $var2 = $_POST["var2"]; 
    $var3 = $_POST["var3"]; 

    debug("start receiving"); 
    debug($var1 . " " . $var2 . " " . $var3); 

    // ... proceed with the data and write it in database... 

    debug("finished"); 
?> 

Проблема заключается в том, что весь код в someFile.php выполняется дважды. Это консольный выход:

javascript debug: send to server: nr1, nr2, nr3 
php debug: start receiving 
php debug: nr1 nr2 nr3 
php debug: finished 
php debug: start receiving 
php debug: nr1 nr2 nr3 
php debug: finished 

Однако данные записываются в базу данных только один раз. Это довольно странно. Это ошибка в php-консоли или мой код плохой?

+0

какой браузер вы используете? Иногда это случалось с Fireforx. –

+0

Я протестировал его в Chromium. Есть ли вероятность, что это просто ошибка в консоли PHP? – MenschMarcus

ответ

1

его происходит потому, что HTTP OPTIONS выполняется первым, и вы должны ограничить нежелательный метод HTTP перед выполнением вашей логики, всегда используйте метод IsSet, смотрите пример ниже

if(isset($_POST)) 
{ 
    $name = $_POST["name"]; 
    $country = $_POST["country"]; 

    $sql = 'INSERT INTO user values("' . $name . '","' . $country . '")'; 

      if ($conn->query($sql)=== TRUE) 
      { 
       $outp = "Inserted " . $name . " and " . $country; 
       echo json_encode($outp); 
      } else { 
       echo json_encode("Error: " . $sql . "<br>" . $conn->error); 
      } 
     } 

здесь он будет вставить строку в таблице только тогда, когда его ПОСЛЕ МЕТОДА.

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