jQuery post of array to PHP 在服务器端返回一个字符串......为啥?

Posted

技术标签:

【中文标题】jQuery post of array to PHP 在服务器端返回一个字符串......为啥?【英文标题】:jQuery post of array to PHP returns a string on server side... why?jQuery post of array to PHP 在服务器端返回一个字符串......为什么? 【发布时间】:2013-11-15 14:21:17 【问题描述】:

给定下表...我正在获取每个单元格的值并附加到数据数组...

    <table id="ProductTable" >
        <thead>...</thead>
        <tbody>
        <tr>
            <td>SLOTP10</td>
            <td>Some Description</td>
            <td>Some Qty</td>
            <td>Some Price</td>
            <td>Some Extended Total</td>
        </tr>
        </tbody>
        <tfoot>...</tfoot>
    </table>

// FORM ELEMENTS ARE NOT SHOWN BUT THIS IS VALID
var data = $("#wbmasonorder").serializeArray(); 
var key = -1;
var products = [];      

$('#ProductTable tbody tr td').each(function(index,element) 
    if (index % 5 == 0) 
        key++;
        products[key]=[];
    
    products[key].push($(this).html());
);
data.push(
    name: 'products',
    value: products
);
console.log(data);

$.post(url,data);

当我记录数据时,节点的值在控制台中显示为数组,但是当我发布它时,$_POST['products'] 的值是逗号分隔的字符串...不是数组

【问题讨论】:

也许您需要将其命名为name: 'products[]'php.net/manual/en/faq.html.php#faq.html.arrays 它不是表单元素,它是一个表格,其单元格将附加到来自表单值的数据中 如果你把它发布到一个PHP脚本,你需要把它当作表单元素来对待。 这不是真的,但感谢您的意见 您可以尝试发布实际上将数据发布到 PHP 脚本的代码。 【参考方案1】:

PHP convention is to name POSTed variables with [] at the end client-side, if they're to be treated like arrays server-side。尝试对您的 javascript 进行以下更改:

data.push(
    name: 'products[]',
    value: products
);

【讨论】:

这是 echo $_POST['products']; 的实际返回"MAG71200,Abracadabra 亮白复印纸,5000/CT 20 磅,97 亮 8 1/2" x 11" 字母,1,27.99,27.99" 我将尝试将整个事物变成一个包含产品和数据数组的对象 节点是否用 [] 命名也无所谓,虽然可能是约定的【参考方案2】:

您正在序列化 js 数组,这基本上将数组转换为字符串。一旦在 php 中收到,您需要将字符串反序列化回数组。

您可能想要查看 JSON 数组/字符串。

【讨论】:

仅供参考....serializeArray 的执行方式与.serialize() 稍有不同,它是一个数组...您可能想看看两者之间的区别 @zgr024 如果你想让我们帮助你,你可以试着少一点屈尊。 那是我的评论,不是@Blazemonger。但是,我怎么知道你的知识水平?你在这里寻求帮助。 我在问一个关于为什么数组变成字符串的具体问题......而你的答案是不正确的,因为它serializeArray 不会把它变成文本......怎么样我比任何人都居高临下 “如何将它作为数组传递?”...“仅供参考... .serializeArray 的执行方式与 .serialize() 略有不同,它是一个数组...”不没有意义。【参考方案3】:

我将帖子从仅发布数据数组更改为分别发布包含数据数组和产品的对象

示例...

$.post(url, data: data, products: products );

而不是...

$.post(url, data);

现在工作正常,我不确定为什么它在附加到数据数组时未能保留数组形式,但它的工作情况已关闭。

感谢大家的帮助

【讨论】:

以上是关于jQuery post of array to PHP 在服务器端返回一个字符串......为啥?的主要内容,如果未能解决你的问题,请参考以下文章

123th LeetCode Weekly Contest Add to Array-Form of Integer

Add to Array-Form of Integer LT989

LeetCode --- 989. Add to Array-Form of Integer 解题报告

LeetCode --- 989. Add to Array-Form of Integer 解题报告

(Easy) Add to Array-Form of Integer (LeetCode)

贪心-Bag of Tokens