通过Javascript函数返回PHP数据而不提交表单

时间:2014-01-23 21:18:03

标签: javascript php jquery forms

我有一个PHP函数,它接受两个日期并返回它们之间的工作日数(包括假期,因为我们支付了这些日期)。现在,我可以在Javascript函数中调用此函数,如果我发送函数实际日期,则返回一个值。例如:

function daycount() {
var days="<?php echo getDays("01/01/2014","01/31/2014"); ?>";
document.write(days);
}

按预期返回23。我希望发生的是用户能够将开始和结束日期放在两个字段中,然后将这些字段值提供给上面的函数,显示结果而无需用户提交表单。像这样:

 <label for="startDate">Start</label>
 <input type="text" name="startDate" id="startDate" onFocus="daycount();" />
 <label for="endDate">End</label>
 <input type="text" name="endDate" id="endDate" onFocus="daycount();" />

这可能吗?

4 个答案:

答案 0 :(得分:2)

您不需要PHP,因为您可以使用JavaScript完成所有这些操作。但是,如果你想使用PHP,你可以使用jQuery中的AJAX这样做:

输入字段:

<input type="text" name="startDate" id="startDate">
<input type="text" name="endDate" id="endDate">

jQuery的:

$('form').submit(function(event) {
    var start = $('#startDate').val();
    var end = $('#endDate').val();

    $.ajax({
        type: 'POST',
        url: 'date.php',
        data: {
            startDate: start,
            endDate: end
        },
        success: function(data) {
            $('#result').text(data);
        }
    });

    event.preventDefault();
});

date.php:

<?php
    // You getDays function here    

    echo getDays($_POST['startDate'], $_POST['endDate']);
?>

答案 1 :(得分:1)

PHP发生在服务器端,Javascript发生在客户端。 这意味着您的PHP脚本在javascript运行之前发生。 你不能只从Javascript函数调用PHP函数,因为它们发生在不同的时间。

实现您的请求的最佳方法是使用Ajax在您的Javascript脚本和PHP脚本之间进行通信。 另一种选择是使用表单发布,但这不是'web 2.0'......

Ajax请求看起来像这样(使用jQuery):

$.ajax({
url: "script.php",
method:'POST'
})
.success(function( data ) {
  //do your thing here with the returned data 
});

你的主要代码看起来与此相似:

function daycount() {
$.ajax({
    url: "script.php",
    method:'POST',
    data: {var1:'',var2:'', etc etc}
    })
    .success(function( data ) {
      var days = data;//depending on how you return the data from the php script
      document.write(days);
    });
}

希望这有帮助!

答案 2 :(得分:1)

我会使用jQuery $ .post发送两个日期到php脚本,它应该返回答案,例如:

HTML:

<form id='days_form'>
    <input name='date_one' /> - <input name='date_two'/>
    <input type='button' id='sendBtn'>
</form>

<span id='answer'></span>

JavaScript的:

$('#sendBtn').click(function{
    $.post('php_script_file.php', $('#days_form').serialize(), function(data){
        $('#answer').html(data);
    });
});

PHP文件:

print getDays("$_POST['date_one']", $_POST['date_two']);

答案 3 :(得分:-1)

不是这样的。您必须了解的是,当php从服务器呈现页面时,javascript部分被写为

function daycount() {
var days="23";
document.write(days);
}

这就是它工作的原因。在呈现之后,如果您希望功能有效,那么有两种方法。

第一个 - 如果你只想从后端(php)完成它,那么你需要进行ajax调用并获得结果。

第二个 - 如果您希望在客户端完成,您应该转换用getDays($a,$b); Javascript编写的业务登录。

对于javascript日期功能,请尝试使用moment.js