2016-10-26 5 views
0

Привет всем Я новичок в php. Я пробовал эту вещь, когда пользователь вводил имя продукта, чтобы подтвердить, что продукт действителен или нет. Для этой цели я использовал событие onchange при вводе текста. Функция onchange вызовет функцию javascript. Из функции javascript я вызываю php, который находится в том же файле. Поэтому, когда я вхожу в имя продукта как-то php функция не работает.вызов функции Php из функции Javascript с использованием ajax

Вот мой код:

<?php 
    include 'conf.php';//it contains the php database configuration 
    session_start(); 

    $quantityRequired=0; 
    $productName_error=""; 
    if(is_ajax()){ 
     if(isset($_POST["productName"])){ 
     $productName=$_POST["productName"]; 
     $row=mysqli_query($conn,"SELECT * from OrderDetails where ProductName='".$productName."'"); 
     if($row) 
     { 
      $result=mysqli_fetch_assoc($row); 
      $quantityRequired=$result["Quantity"]; 
     } 
     else 
     { 
      $productName_error="The product name is not valid or product does not exist"; 
      echo $productName_error; 
     } 
     } 
    } 
    function is_ajax() { 
    $flag=(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 
    return $flag; 
    } 
?> 
<html> 
    <head> 
     <title>Order Page </title> 
     <script type = "text/javascript" 
     src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    </head> 
    <body> 
     <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST"> 
     <label for="userName">Username</label><br> 
     Product Name<input type="text" name="productName" id="productName" onchange="validateProduct()"><?php echo $productName_error?><br> 
     Quantity Required<input type="text" name="quantityRequired" id="quantityRequired"><br> 
     Availability<input type="text" name="availability"> 
     <p id="demo"></p> 
     </form> 
     <script> 
     function validateProduct() 
     { 
      $.ajax({ 
      type: "POST" 
     }); 

     } 
     </script> 
    </body> 
</html> 

поэтому код, когда пользователь вводит продукт name.The функция Validate продукт called.From проверить продукт будет вызывать PHP, который находится в той же файл. Функция is_ajax() используется для проверки того, является ли запрос ajax или нет.

ответ

0

Там могут быть и другие проблемы, которые я не заметили, но первое, что бросается ко мне, что ваш код на стороне сервера работает условно:

if(isset($_POST["productName"])) 

И это состояние никогда не было удовлетворено, потому что вы Бесполезный «т отправить любые значения в запросе AJAX:

$.ajax({ 
    type: "POST" 
}); 

Отправить значение (ы), который вы ищете:

$.ajax({ 
    type: "POST", 
    data: { productName: $('#productName').val() } 
}); 

Возможно, вам также понадобится указать пару других параметров, если они не по умолчанию правильно. Явный код, как правило, лучше, чем неявный во многих случаях:

$.ajax({ 
    url: 'yourUrl.php', 
    type: "POST", 
    dataType: 'html', 
    data: { productName: $('#productName').val() } 
}); 

В общем, вы, вероятно, захотите проверить документацию для $.ajax() и посмотреть, что вы можете и должны сказать ему. Вы также захотите взглянуть на инструменты отладки своего браузера, чтобы лучше узнать, почему и как это не удается при тестировании этих вещей.

Говоря о вещах, которые вы должны делать, вы должны прочитать this и this. В настоящий момент ваш код широко открыт для атак SQL-инъекций, что в основном означает, что вы используете в качестве кода, что бы ни отправили ваши пользователи.

+0

я сделал изменения, но тогда тоже код не working.I думаю is_ajax() вызывает проблему. –

+0

@APPYSHAH: Почему вы так думаете? Какую отладку вы сделали, чтобы подтвердить это? Я подозреваю, что вы действительно не нуждаетесь в функции 'is_ajax()' в любом случае. Просто поместите свой код AJAX на свою страницу и возьмите запрос AJAX. Каждый серверный ресурс должен выполнять свои собственные обязанности, а не комбинировать несколько разных ресурсов на одной странице с кучей операторов 'if'. – David

+0

Я попытался удалить is_ajax(), но потом тоже не работает. –

0
var data1 = "Something"; 
$.ajax({ 
    url: "script.php", 
    type: "POST", 
    data: { data1: data1 } 
}).done(function(resp) { 
    console.log(resp) 
}).fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus + " - Please try again.") 
}) 

Здесь у вас есть скрипт, который будет отправлять переменную data1 на PHP-скрипт. В обработанной части resp - это возврат, который вы отправляете обратно из скрипта php.

Если вы хотите послать больше данных, просто добавьте его { data1: data1, data2: data2 } и так далее.

Просто приспосабливайтесь в соответствии с вашими потребностями.

+0

я сделал изменения, но это не working.I думать is_ajax() не работает –

1

PHP-библиотека для Ajax

Jaxon является открытым исходным кодом PHP библиотека для простого создания веб-приложений Ajax. Он позволяет на веб-странице делать прямые вызовы Ajax классам PHP, которые, в свою очередь, будут обновлять свой контент, не перезагружая всю страницу.

Jaxon реализует полный набор функций PHP для определения содержимого и свойств веб-страницы.Существует несколько плагинов для расширения его функциональных возможностей и обеспечения интеграции с различными фреймворками PHP и CMS.

Как Jaxon работает

Определение и зарегистрировать PHP классы с Jaxon.

$jaxon->register(Jaxon::CALLABLE_OBJECT, new MyClass); 

Позвоните в ваш класс, используя код javascript, созданный Jaxon.

<input type="button" onclick="JaxonMyClass.myMethod()" /> 

проверка ссылка https://www.jaxon-php.org/docs.html