使用ajax从Javascript函数调用Php函数

时间:2016-10-26 09:54:14

标签: javascript php jquery ajax

大家好我是php的新手。 当用户输入产品名称需要验证产品是否有效时,我一直在试用这个东西。  为此目的,我在输入文本时使用了onchange事件.onchange函数将调用javascript函数。从javascript函数我调用同一个文件中的php。所以当我输入产品名称时,不知何故php函数没有用。

这是我的代码:

<?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> 

所以代码是当用户输入产品名称时。函数验证产品被调用。从验证产品,它将调用同一文件中的php。 is_ajax()函数用于检查它是否是ajax请求。

3 个答案:

答案 0 :(得分:1)

Ajax的PHP库

Jaxon是一个开源PHP库,可以轻松创建Ajax Web应用程序。它允许进入一个网页,直接对PHP类进行Ajax调用,然后更新其内容,而无需重新加载整个页面。

Jaxon实现了一整套PHP函数来定义网页的内容和属性。有几个插件可以扩展其功能并提供与各种PHP框架和CMS的集成。

Jaxon如何运作

使用Jaxon定义并注册PHP类。

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

使用Jaxon生成的javascript代码调用您的类。

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

检查链接https://www.jaxon-php.org/docs.html

答案 1 :(得分: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 },依此类推。

根据您的需要进行调整。

答案 2 :(得分:0)

我可能还有其他一些问题没有发现,但是第一件事是我的服务器端代码有条件地运行:

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

因为你没有在AJAX请求中发送任何值,所以从未满足这个条件:

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

发送您正在寻找的价值:

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

如果没有正确默认,您可能还需要指定其他几个选项。在许多情况下,显式代码通常比隐式更好:

$.ajax()

一般情况下,您可能需要查看{{1}}的文档,看看您能做什么,应该告诉它。您还需要查看浏览器的调试工具,以便更详细地了解测试这些内容时失败的原因和方式。

说到你应该做的事情,你应该阅读https://stackoverflow.com/a/19849420/4496364this。您的代码目前对SQL注入攻击持开放态度,这基本上意味着您以代码执行用户发送给您的任何内容。