jQuery Ajax 不将数组作为数据对象发送

Posted

技术标签:

【中文标题】jQuery Ajax 不将数组作为数据对象发送【英文标题】:jQuery Ajax Not Sending Array as Data Object 【发布时间】:2015-11-29 16:58:25 【问题描述】:

我正在构建一个联系表单,当用户点击提交按钮时,它会通过 ajax 调用向公司发送一封电子邮件。但是,它不会将数组变量从表单传递到 ajax php 文件。成功后将数组变量记录到控制台时似乎可以工作。但是电子邮件中缺少数据。这是我的代码示例:

$("form").submit(function(e) 
    e.preventDefault();
    if ($('#email').val() == $('#cemail').val()) 
        var arr = [];
        arr["fname"] = $('#fname').val();
        arr["lname"] = $('#lname').val();
        arr["email"] = $('#email').val();
        arr["subject"] = $('#subject').val();
        arr["newsletter"] = $('#newsletter').val();
        arr["message"] = $('#message').val();

        $.ajax(
            url: "contact-ajax.php",
            method: "POST",
            data: d: arr,
            success: function (d) 
                $('button#submit').css('background', '#A2D852');
                $('button#submit').html('Message Sent Successfully!');
                $('form').get(0).reset();
                //alert(d);
                console.log(arr);
                setTimeout( function()                 
                    $('button#submit').css('background', '#FF8A00');
                    $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">');
                    $('#loading-icon').hide();
                ,3000);
            ,
            error: function(jqXHR, textStatus) 
                $('button#submit').css('background', '#F75D53');
                $('button#submit').html('Failed to send. Please try again!');
                setTimeout( function()                 
                    $('button#submit').css('background', '#FF8A00');
                    $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">');
                    $('#loading-icon').hide();
                ,4000);                    
            
        );
    
    else 
        alert("Your confirmation email does not match your email.");
        return false;
    
);

var_dump($d) 在控制台中返回 null,但 console.log(arr) 返回有效数组。任何帮助将不胜感激。

【问题讨论】:

试试这个:data: JSON.stringify(d: arr) @leo.fcx 仍然返回 null。 使用浏览器开发者工具的网络标签来检查发送的请求。您应该能够看到已(或未)发送到您的服务器的请求负载。 【参考方案1】:

不要使用数组,而是使用对象。

$("form").submit(function(e) 
    e.preventDefault();
    if ($('#email').val() == $('#cemail').val()) 

        // from this 
        // var arr = [];
        // arr["fname"] = $('#fname').val();
        // arr["lname"] = $('#lname').val();
        // arr["email"] = $('#email').val();
        // arr["subject"] = $('#subject').val();
        // arr["newsletter"] = $('#newsletter').val();
        // arr["message"] = $('#message').val();

        // to this :

        var dataObj =  fname: $('#fname').val(),
                        lname:  $('#lname').val(),
                        email: $('#email').val(),
                        subject: $('#subject').val(),
                        newsletter: $('#newsletter').val(),
                        message: $('#message').val();


        $.ajax(
            url: "contact-ajax.php",
            method: "POST",
            data: dataObj,
            success: function (d) 
                $('button#submit').css('background', '#A2D852');
                $('button#submit').html('Message Sent Successfully!');
                $('form').get(0).reset();
                //alert(d);
                console.log(arr);
                setTimeout( function()                 
                    $('button#submit').css('background', '#FF8A00');
                    $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">');
                    $('#loading-icon').hide();
                ,3000);
            ,
            error: function(jqXHR, textStatus) 
                $('button#submit').css('background', '#F75D53');
                $('button#submit').html('Failed to send. Please try again!');
                setTimeout( function()                 
                    $('button#submit').css('background', '#FF8A00');
                    $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">');
                    $('#loading-icon').hide();
                ,4000);                    
            
        );
    
    else 
        alert("Your confirmation email does not match your email.");
        return false;
    
);

【讨论】:

哇,这解决了。使数组成为一个对象实际上是有效的。 @Daniel 太棒了!很高兴它有帮助!【参考方案2】:

如果你尝试像这样在 ajax 中发送一个数组,它将不会在设置页面中发送

  var minprice = jQuery('#minPrice').val();
  var maxprice = jQuery('#maxPrice').val();
  var data =[];
  data['min'] = minprice;
  data['max'] = maxprice;

这是数组,不是这样的。如果您在 ajax 中发送此数组,则数组创建如下。

var data =;

像这样创建数组

【讨论】:

var data =; 这是声明对象,而不是数组。【参考方案3】:
$("#YourFormNameGoesHere").submit(function(e) 
    e.preventDefault();
    if ($('#email').val() == $('#cemail').val()) 
        var form_data = new FormData($('#YourFormNameGoesHere')[0]);
        $.ajax(
            url: "contact-ajax.php",
            method: "POST",
            data: form_data,
            async: true,
            cache:false,
            contentType: false,
            processData: false,
            success: function (d) 
                $('button#submit').css('background', '#A2D852');
                $('button#submit').html('Message Sent Successfully!');
                $('form').get(0).reset();
                //alert(d);
                console.log(arr);
                setTimeout( function()                 
                    $('button#submit').css('background', '#FF8A00');
                    $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">');
                    $('#loading-icon').hide();
                ,3000);
            ,
            error: function(jqXHR, textStatus) 
                $('button#submit').css('background', '#F75D53');
                $('button#submit').html('Failed to send. Please try again!');
                setTimeout( function()                 
                    $('button#submit').css('background', '#FF8A00');
                    $('button#submit').html('Send Message <img src="contact/images/loading-icon.gif" id="loading-icon">');
                    $('#loading-icon').hide();
                ,4000);                    
            
        );
    
    else 
        alert("Your confirmation email does not match your email.");
        return false;
    
);                             

【讨论】:

以上是关于jQuery Ajax 不将数组作为数据对象发送的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax后混合数组对象将空数组发送到php

jQuery 1.4.4+ AJAX 请求 - 发布空数组或对象变成字符串

使用 jquery ajax 将 javascript 数组变量发送到 php 脚本(获取字符串作为输出而不是数组)

如何使用 $.ajax(jQuery 或 Zepto)发布对象数组

asp.net mvc 接收jquery ajax发送的数组对象

Ajax 将带有两个数组的 JSON 对象发送到一个 servlet 并在没有 jQuery 的情况下在 java servlet 中解析