无法将值传递给php

时间:2017-01-15 16:29:18

标签: javascript php jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<!--SERVER Query and Return function-->
    <script type="text/javascript">
    function getreport()
    {
        $("button").click(function()
        {
            var id = $("#idF").val();  //assigning form values
            var report= $("#reportF").val();
            var date = $("#dateF").val();

            $.post("report.php", {idP:id,reportP:report,dateP:date}, function(data){
                $("#results").html(data); //updating the page with results
                }); //trying to pass the 3 fields to report.php
        });
    }
    </script>

<form id="queryReports">
        ID: <input type="text" style='text-transform:uppercase' id="idF">   Report:<input type="text" style='text-transform:uppercase' id="reportF">
        Date(dd/mm/YYYY): <input type="date" id="dateF" id="Study_dateF">           
        <button  id="button" onclick="getreport()">SEARCH</button>

</form>

有人能指出我正确的方向,为什么这段代码似乎无能为力?当我单击按钮时,我希望使用从表单传递给它的值来调用report.php。但是我从中得不到任何东西,我检查了php日志,如果我使用按钮调用report.php,则没有任何内容被传递。

另一方面,如果我使用硬编码值运行report.php,我会得到结果。我怀疑我的jQuery / Javascript中缺少一些东西

3 个答案:

答案 0 :(得分:1)

删除$("button").click()功能。 您是通过按钮上的getreport()调用onclick="getreport()"函数,但是当它调用该函数时,它无法访问AJAX请求,因为它位于{{1}内部功能。

答案 1 :(得分:1)

我在代码中发现了一些错误。您应该对属性使用双引号,永远不要给元素两个ID,并在处理提交按钮上的单击事件时阻止默认值。当在另一个内部创建一个处理程序时,您还应该避免使用两个处理程序来执行相同的操作。试试这个:

$("button").click(function(ev)
        {
            ev.preventDeafult();
            var id = $("#idF").val();  //assigning form values
            var report= $("#reportF").val();
            var date = $("#dateF").val();

            $.post("report.php", {idP:id,reportP:report,dateP:date}, function(data){
                $("#results").html(data); //updating the page with results
                }); //trying to pass the 3 fields to report.php
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<form id="queryReports">
        ID: <input type="text" style="text-transform:uppercase" id="idF">   Report:<input type="text" style="text-transform:uppercase" id="reportF">
        Date(dd/mm/YYYY): <input type="date" id="dateF">           
        <button  id="button">SEARCH</button>

</form>

答案 2 :(得分:1)

逻辑是有缺陷的,因为你将内联事件监听器与jQuery混合使用。

jQuery one中的代码在下次单击按钮

之前不会触发

删除内联版本并将按钮类型更改为"button",或者默认为"submit",并通过默认流程提交表单

<button  id="button" type="button">SEARCH</button>

JS

$(function() {      
  $("#button").click(function(e) {
    e.preventDefault();
    var id = $("#idF").val(); //assigning form values
    var report = $("#reportF").val();
    var date = $("#dateF").val();

    $.post("report.php", {
      idP: id,
      reportP: report,
      dateP: date
    }, function(data) {
      $("#results").html(data); //updating the page with results
    }); //trying to pass the 3 fields to report.php
  });
});

您可以通过向输入元素添加name属性并在表单上使用serialize()来简化此操作

示例输入:

<input type="text"  name="idP" id="idF"> 

JS

$(function() {  
  // use submit event instead of click on button    
  $("#queryReports").submit(function(e) { 
     e.preventDefault();
    $.post("report.php", $(this).serialize(), function(data) {
      $("#results").html(data); //updating the page with results
    }); //trying to pass the 3 fields to report.php
  });
});