【问题标题】:PHP isn't receiving my AJAX POST dataPHP 没有收到我的 AJAX POST 数据
【发布时间】:2016-01-12 08:54:44
【问题描述】:

我正在使用 AngularJS 构建一个单页网站,并且正在制作一个联系表。我查看了很多关于这个主题的 q/a,但没有一个解决方案对我有用。我有基本的 HTML:

<form id="ajax-contact" method="post">
<div class="field">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>
</div>

<div class="field">
    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required>
</div>

<div class="field">
    <label for="message">Message:</label>
    <textarea id="message" name="message" required></textarea>
</div>

<div class="field">
    <button class="submit">Send</button>
</div>
</form>
<!--Contact Form Ajax, added in HTML for MVP purposes, will be changed later-->

<script>
$(document).ready(function() {

var name = $('#name');
var email = $('#email');
var message = $('#message');

$('button.submit').click(function() {

    alert("Worked");
    var contact_data = {
        'sender_name': $(name).val(),
        'sender_email': $(email).val(),
        'sender_message': $(message).val()
    };
        console.log(contact_data);
        $.ajax({
        method:'POST',
        url:'/php/contact.php',
        data: contact_data
    }).done(function(data) {

        alert('Success!');
        console.log('Submitted succesfully:' + data);

    }).fail(function(textStatus, jqXHR) {
        alert('Failed :(');
        console.log(textStatus);
        console.log(jqXHR);
    });
});
});
</script>

我的 PHP(位于单独的文件中):

<?php

$name = isset($_POST['sender_name']) ? $_POST['sender_name'] : '';

echo $name;

?>

我没有在我的主视图中包含 php 文件,但是我正在通过查看 localhost:7070/php/contact.php 来检查回显的结果(如果我的 PHP 只是运行后端来发送一个电子邮件,我不需要将其包含在视图中)。当我查看回显时,我看到的只是空白,如果我删除了 isset 逻辑,我会收到“sender_name”的“未识别索引”错误。我究竟做错了什么?谢谢!

【问题讨论】:

  • 在您的 php 文件中创建 print_r($_POST); 并在开发者控制台中检查响应。
  • 为什么标记为 Angularjs?
  • @JohannesJander 这是一个 AngularJS 应用程序,我已经达到了我要尽可能多地帮助诊断问题的地步
  • @AlexAndrei 当我这样做时,我得到的只是:Array()
  • 只是想知道为什么人们会在 Angular 应用程序中使用除 Angular 之外的所有东西来读取表单字段并发布它们。

标签: php jquery html angularjs ajax


【解决方案1】:

尝试删除''

来自:

var contact_data = {
    'sender_name': $(name).val(),
    'sender_email': $(email).val(),
    'sender_message': $(message).val()
};

到:

var contact_data = {
    sender_name: $(name).val(),
    sender_email: $(email).val(),
    sender_message: $(message).val()
};

【讨论】:

    【解决方案2】:

    编写如下代码:-

    var name = $('#name').val();
    var email = $('#email').val();
    var message = $('#message').val();  
    
    
    var contact_data = {
         'sender_name': name,
         'sender_email': email,
         'sender_message': message
     };
    

    【讨论】:

    • 我尝试使用所有这些方法,但仍然无法正常工作。我知道我的 POST 以预期的数组格式提交,但是在我的 php 文件中执行 print_r($_POST) 之后,我看到 PHP 文件只接收一个空数组(它打印出 Array())。可以是我发送的数据的格式吗?
    • 如果您可以在控制台中获取数据。 log(contact_data) 那么你的格式也可以。其他代码看起来没问题。
    【解决方案3】:

    jsut 在 ajax 函数中将 method:'POST' 更改为 type = 'POST'

    <script>
    $(document).ready(function() {
    
    var name = $('#name');
    var email = $('#email');
    var message = $('#message');
    
    $('button.submit').click(function() {
    
        alert("Worked");
        var contact_data = {
            'sender_name': $(name).val(),
            'sender_email': $(email).val(),
            'sender_message': $(message).val()
        };
            console.log(contact_data);
            $.ajax({
            type:'POST',
            url:'/php/contact.php',
            data: contact_data
        }).done(function(data) {
    
            alert('Success!');
            console.log('Submitted succesfully:' + data);
    
        }).fail(function(textStatus, jqXHR) {
            alert('Failed :(');
            console.log(textStatus);
            console.log(jqXHR);
        });
    });
    });
    </script>
    

    【讨论】:

      【解决方案4】:

      使用下面的格式,希望对你有帮助

      var contact_data = {
          'sender_name': $(name).val(),
          'sender_email': $(email).val(),
          'sender_message': $(message).val()
      };
      
      console.log(contact_data);
      
      $.ajax({
          method:'POST',
          url:'/php/contact.php',
          data: {contact_data: contact_data},
      }).done(function(data) {
          alert('Success!');
          console.log('Submitted succesfully:' + data);
      }).fail(function(textStatus, jqXHR) {
          alert('Failed :(');
          console.log(textStatus);
          console.log(jqXHR);
      });
      

      【讨论】:

        【解决方案5】:

        如果您在此之后获得价值,请尝试这样。那么函数不是通过定义变量来发送值

        $('button.submit').click(function() {
        
            alert("Worked");
         //   var contact_data = {
         //       'sender_name': $(name).val(),
                'sender_email': $(email).val(),
         //       'sender_message': $(message).val()
          //  };
                console.log(contact_data);
                $.ajax({
                method:'POST',
                url:'/php/contact.php',
                data: {
                'sender_name': $(name).val(),
                'sender_email': $(email).val(),
                'sender_message': $(message).val()
            }
            }).done(function(data) {
        
                alert('Success!');
                console.log('Submitted succesfully:' + data);
        
            }).fail(function(textStatus, jqXHR) {
                alert('Failed :(');
                console.log(textStatus);
                console.log(jqXHR);
            });
        });
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-23
          • 2016-10-17
          • 1970-01-01
          相关资源
          最近更新 更多