【问题标题】:passing arrays in jquery post request not working在jquery post请求中传递数组不起作用
【发布时间】:2019-04-30 08:03:35
【问题描述】:

我试图在 jquery .post 中传递 javascript 数组,但它没有显示在页面上。我究竟做错了什么?我看到我的数组已填满,但数据未显示在页面帖子上。控制台日志显示 p 元素,我也不知道它为什么这样做。

jquery 代码:

 $("#submitboeking").click(function(event) {

        event.preventDefault();


        //Cursisten
        var voornamen = [];
        var achternamen = [];
        var geslachten = [];
        var geboortedata = [];

        $("[id^='txtCursistVoornaam']").each(function() {
            voornamen.push($(this).val());
        });
        $("[id^='txtCursistAchternaam']").each(function() {
            achternamen.push($(this).val());
        });
        $("[id^='radCursistGeslacht']:checked").each(function() {
            geslachten.push($(this).val());
        });
        $("[id^='txtCursistGeboortedatum']").each(function() {
            geboortedata.push($(this).val());
        });

        // console.log(voornamen);
        // console.log(achternamen);
        // console.log(geslachten);
        // console.log(geboortedata);

        $.post('/wp-content/themes/tweb/processboeking.php',
         {


            voornamen: voornamen,
            geslachten: geslachten,
            voornamen: voornamen,
            achternamen: achternamen,
            geboortedata: geboortedata,
            })
            .done(function(data)
             {
                console.log(data)
                $('#overzichtboeking').html(data);

            }).fail(function(data) {
                alert(response.responseText);
            });

        var li_count = $('.nav-tabs li').length;
        var current_active = $('.nav-tabs li.active').index();
        if (current_active < li_count) {
            $('.nav-tabs li.active').next('li').find('a').attr('data-toggle', 'tab').tab('show');
            var txt = $(".oplselect option:selected").text();
            var val = $(".oplselect option:selected").val();
            $('.showoplnaam').html('Uw selectie: ' + txt);
        }

    });

console.log 数据:

Array
(
    [voornamen] => Array
        (
            [0] => G.F.
        )

    [geslachten] => Array
        (
            [0] => Dhr.
        )

    [achternamen] => Array
        (
            [0] => martens
        )

    [geboortedata] => Array
        (
            [0] => 25-10-1993
        )

)
<p id="overzichtboeking"></p>  

processboeking.php

<?php
include '/home/vhosts/tweb.nl/httpdocs/wp-content/themes/tweb/db/dbcon.php';

print_r($_POST);

?>
<p id="overzichtboeking"></p>  

【问题讨论】:

  • "控制台日志还显示 p 元素" - ajax 请求的结果将包含来自请求页面的all 输出。由于您在请求文件的末尾输出&lt;p id="overzichtboeking"&gt;&lt;/p&gt;,它将成为响应的一部分。
  • 您也不需要手动将[] 添加到请求数据的键名末尾。由于这些变量已经是数组,jQuery 应该为你处理它。
  • @MagnusEriksson 检查我的编辑,我更改了 [],但我的 print_r 帖子仍然没有响应。
  • “我的 print_r 帖子仍然没有回复”是什么意思?那么您问题中的“console.log 数据”来自哪里?如果你问我,这看起来像 print_r() 的输出?
  • @MagnusEriksson 我试图捕捉页面 processboeking.php 上的帖子,所以我的打印 r_post 需要在页面 processboeking 上显示数据。 console.log 显示控制台中的数据。你看我也在做 $('#overzichtboeking').html(data);这意味着数据被放入 overzichtboeking 的 id 中,并且它需要显示在页面上,但它没有。数据仅在控制台中,不在页面上。

标签: javascript php jquery post


【解决方案1】:

以数组的形式获取完整的表单数据并将其 json 字符串化。

var formData = JSON.stringify($("#myForm").serializeArray());

您可以稍后在 ajax 中使用它。或者,如果您不使用 ajax;把它放在隐藏的文本区域并传递给服务器。如果此数据通过普通表单数据作为 json 字符串传递,那么您必须使用 json_decode 对其进行解码。然后,您将获取数组中的所有数据。

$.ajax({
  type: "POST",
  url: "serverUrl",
  data: formData,
  success: function(){},
  dataType: "json",
  contentType : "application/json"
});

摘自这篇 stackoverflow 帖子:How to send a JSON object using html form data

要从服务器端的 JSON 输入开始,请查看这篇文章以转换回 PHP 数组:https://www.dyn-web.com/tutorials/php-js/json/decode.php

【讨论】:

  • 不是表单数据。
  • 好的,但原则仍然适用。而不是var formData = JSON.stringify($("#myForm").serializeArray());,您将拥有每个数组var array1 = JSON.stringify(voornamen);。然后在您的 POST Ajax 调用中,您将通过 arrayX 变量发送。在服务器端,您将对每个 $_POST['arrayX'] 变量调用 JSON_DECODE 函数。
  • 没有理由手动使用JSON.stringify()。如果您想发布完整的表格,只需:data: $('#your-form').serialize()。如果你想发布一些自定义数据,只需传递一个 json 对象:data: {someArray: ['foo', 'bar', ...], someKey: 'hello world'}
  • 在发送之前对数据进行编码(使用 JSON.stringify)似乎也有点不必要,只是在 PHP 接收到它时在后端再次对其进行解码。只需将其作为正常的后参数发送
  • 用户声明这不是表单数据,因此我建议将表单上的serializeArray() 替换为查看单个元素。 JSON.stringify 从 JavaScript 数组创建 JSON 对象,并允许通过 HTTP(S) 传输它。如果@nielsmartens 只是通过字母数字文本发送,那么您是对的,编码和解码毫无意义。
猜你喜欢
  • 2012-12-29
  • 2022-11-18
  • 2018-07-28
  • 2017-12-11
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多