如何仅运行一次javascript函数?

时间:2019-08-26 06:18:28

标签: javascript php jquery

最近,我在how to get the data value of input without a submit button上问了一个问题。

答案对我来说非常有效,现在我进入了第二阶段,我想将javascript的变量保存到php的变量中,以便可以使用phpmail发送数据。

我了解没有直接的方法可以将javascript变量的值分配给php变量。

因此,我想出了以下代码:( jquery 3.4.1分钟

index.php

    <form>
        <input type="text" name="nameValidation" id="nameValidation" placeholder="Name">
        <input type="number" name="phoneValidation" id="phoneValidation" placeholder="Phone">
        <input type="email" name="emailValidation" id="emailValidation" placeholder="Email">
    </form>

    <div id="display"></div>
    <script>
        $(function() {

            $('#nameValidation').on('input', function() {
                var nameValisession = $(this).val();
                sessionStorage.setItem("nameValiSession", nameValisession);
            }); 

            $('#phoneValidation').on('input', function() {
                var phoneValisession = $(this).val();
                sessionStorage.setItem("phoneValiSession", phoneValisession);
            }); 

            $('#emailValidation').on('input', function() {
                var emailValisession = $(this).val();
                sessionStorage.setItem("emailValiSession", emailValisession);
            }); 

        }); 

        window.onbeforeunload = function() {
            return "email will get sent!";
        }

    </script>

此页面没有错误,可以正常工作。它收集有关keyup的数据并将其设置为会话存储。

index2.php

<body onload="myFunc()">
    <div id="display"></div>
    <div id="display2"></div>
    <div id="display3"></div>
    <script>
        var nameValisession = sessionStorage.getItem("nameValiSession");
        var phoneValisession = sessionStorage.getItem("phoneValiSession");
        var emailValisession = sessionStorage.getItem("emailValiSession");
        document.getElementById("display").innerHTML = nameValisession;
        document.getElementById("display2").innerHTML = phoneValisession;
        document.getElementById("display3").innerHTML = emailValisession;


        function myFunc(){
            myFunc = function(){}; 
            window.location.replace("index2.php?myName=" + nameValisession + "&myPhone=" + phoneValisession + "&myEmail=" + emailValisession); 
        };

    </script>

    <?php
        $myName = $_GET["myName"];
        $myPhone = $_GET["myPhone"];
        $myEmail = $_GET["myEmail"];

        echo "PHP RESULT: " . $myName . " - " . $myPhone . " - " . $myEmail;
    ?>

</body>

现在,这是我打算从index1.php获取所有数据的页面,通过将这些值设置为URL参数并使用PHP来获取结果,将javascript的变量转换为php的变量。

这对我有用,除了零件,它一直在重新加载。根据{{​​3}},它将先加载myFunc,然后将其停止,但是,就我而言,它是永久循环的,没有停止该函数。

如何解决此问题以使函数仅加载一次?

2 个答案:

答案 0 :(得分:1)

在重新加载页面之前,请检查所需的数据是否已经在查询参数中-如果已存在,请不要重新加载。请检查现有参数之一的存在,如果存在则不重新加载,或者添加一个myFunc这样的布尔参数,可以在运行myFunc时将其设置为false,然后仅运行{ {1}}(如果needs_reloadtrue

答案 1 :(得分:1)

为什么不使用sessionStorage并设置适当的标志?

if (sessionStorage.getItem('myFlag') != 'yes') {
    sessionStorage.setItem('myFlag', 'yes');
    // do your stuff 
}