通过AJAX调用PHP函数只需重新加载页面。

时间:2017-12-16 23:33:52

标签: php jquery ajax

我正在构建一个新脚本,我正在尝试添加一个PHP函数来发送电子邮件。我在JavaScript函数中嵌套了几个Ajax调用。每次我调用它只是重新加载页面。

我包含jquery和JavaScript库以及以下内容。

    <script src="assets/js/main.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

我调用该功能的按钮如下。

    <button type="button" onclick="jq1()"
                        class="btn btn-primary">Submit</button>

JavaScript和AJAX函数是我所包含的库的一部分。具体细节如下。

JavaScript函数是

    function jq1 () {

            doAjax();

            }

反过来调用以下AJAX。

   function doAjax()

    {

        var name, email, message;
        name = JSON.stringify($('name').val();
        email = JSON.stringify($('email').val();
        message = JSON.stringify($('message').val();

        ajax = phpcall(name, email, message);

    }

这是实际php函数调用的Jquery。

    function phpcall (name, email, message)

     {

        return $.ajax({

           { url: 'file.php', 
             type: 'POST', 
             data: { email: email, name: name, message: message } 

            return false; 
        });

     }

我测试的PHP表单命令行,它的工作原理。以下是实际PHP调用的详细信息。

   <?php
    function mail2() {

        if (isset($_POST['name']))
          (
            $name = json_decode(sanitize($_POST['name']));
        )

        if (isset($_POST['email']))
        (
             $email = json_decode(sanitize($_POST['email']));
        )

        if (isset($_POST['message']))
          (
            $email = json_decode(sanitize($_POST['email']));
         )

       $to = "willdoit.winchester@gmail.com";
       $subject = "Service Inquiry";
       $txt = $message . $email;
       $headers = "From: service@willdoitwinchester.com";

        mail($to,$subject,$txt,$headers);
      }
     ?>

我是Ajax和JQuery的新手,但是,在这里,我无法感觉到我正在重新发明轮子。

我在声明中包含了JQuery,我是否需要为JSON和AJAX单独声明?我提供的详细信息中是否存在语法错误?这将是函数调用的正常进程(JavaScript,两个嵌套的AJAX调用,然后是PHP?)?我错过了专业人士看一看的东西吗?

2 个答案:

答案 0 :(得分:0)

Hy,对不起,但我不明白你写的东西

name = JSON.stringify($('name').val();

首先缺少一个结束括号和#来恢复该值,但这是次要问题,所以代码必须是

name = JSON.stringify($('#name').val()); 

但问题是另一个JSON.stringify正在将一个OBJECT转换成一个字符串,所以我真的不会写你的书面因为我认为$(&#39;#name&#39;)。val()是值不是对象。 所以解决这个问题,但只有你可以知道你为什么要对值进行JSON字符串化而不是JSON对象,还有其他问题,你在PHP中使用的sanitize函数是个人函数?否则会出错。 .. 在Ajax对象里面以这种方式返回false是什么意思?返回false是什么意思? 顺便说一句,代码必须以这种方式重写,但有一些我真正不理解的JSON.stringify的问题。 另一个问题是你如何切换file.php中的mail2函数?这是另一个问题,但我想你做得那么好...... 顺便说一句。

Ps:但为什么JSON会串通? ;)

HTML

    <label for="name">Nome</label>
    <input type="text" id="name" value="" name="name"><br>
    <label for="email">Email</label>
    <input type="text" id="email" value="" name="email">
    <div class="form-group">
         <div class="Descrizione">         
            <label for="InserisciDescrizione" class=""><b>Descrizione : </b></label>
            <textarea id='message' placeholder="Inserisci Descrizione"
                      name='message'  rows='5' cols='60' value="" 
                      title="Descrizione"></textarea>
         </div>
    </div>
    <button type="button" id="btnEmail" onclick="jq1()">Submit</button>

JS

    function jq1 () {
            doAjax();
    }
   function doAjax(){
        var name, email, message;
        name = JSON.stringify($('#name').val());
        email = JSON.stringify($('#email').val());
        message = JSON.stringify($('#message').val());
        ajax = phpcall(name, email, message);
    }       
    function phpcall (name, email, message){
        return $.ajax({
            url: 'file.php', 
             type: 'POST', 
             data: { email: email, name: name, message: message } 
        });
    }   

PHP

        function mail2() {
            if (isset($_POST['name'])){
                $name = json_decode($_POST['name']);
              }

            if (isset($_POST['email'])){
                 $email = json_decode($_POST['email']);
            }
            if (isset($_POST['message'])){
                $message= json_decode($_POST['message']);
        }

           $to = "willdoit.winchester@gmail.com";
           $subject = "Service Inquiry";
           $txt = $message . $email;
           $headers = "From: service@willdoitwinchester.com";
            //print '1' .$name .'2' .$email .$message;exit;
            mail($to,$subject,$txt,$headers);
          } 

答案 1 :(得分:0)

我更正了语法错误,页面不再重新加载,但是,电子邮件没有被发送。

我在初始JavaScript调用中添加了一些日志记录,如下所示。

          function jq1 () {

             var txtFile = "/tmp/test.txt";
             var file = new File(txtFile);

             file.open("w"); // open file with write access
             file.writeln("First line of text");
             file.close();

            doAjax();

            }

文本文件没有填充任何内容。什么也没写。

然后我将JQuery和AJAX函数从库中移出并移动到HTML中,如下所示。

      <script language="javascript">
          function jq1 () {

           var txtFile = "/tmp/test.txt";
           var file = new File(txtFile);

           file.open("w"); // open file with write access
           file.writeln("First line of text");
           file.close();

            doAjax();

          }

          function phpcall (name, email, message)

            {

                        return $.ajax({

                                 url: 'file.php', 
                                 type: 'POST', 
                                 data: { email: email, name: name, message: message } 


                      });

             }


          function doAjax()

                    {

                var name, email, message;
                        name = JSON.stringify($('#name').val());
                        email = JSON.stringify($('#email').val());
                        message = JSON.stringify($('@message').val());

                ajax = phpcall(name, email, message);

                    }

</script>

这仍然导致了同样的事情。按钮点击没有任何反应。

我是否应该在脚本中包含任何语言?我实际上只是声明了以下内容。

        <script src="assets/js/vendor/modernizr-2.8.3-respond-1.4.2.min.js"></script>
        <script language="javascript" src="assets/js/main.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

在我调用函数的声明或按钮标记中似乎存在根本性的错误。我将其包括在内。

     <button type="button" id="btnEmail"
                        onclick="jq1()" class="btn btn-primary">Submit</button>

对我来说似乎很简单。

抱歉,我花了一些时间来进行测试。我们的网页脚本很有用。有什么建议吗?