繁体   English   中英

通过AJAX的POST JavaScript对象的JSON构造函数

[英]JSON constructor to POST Javascript object via AJAX

我有一个用于客户端的自定义电子商务构建,其中包含需要在表单可以发布之前将输入发送到服务器进行哈希处理的输入。

基本设置包含两个选择字段,一个用于风味名称 ,另一个用于其对应的数量 用户可以添加其他风味剂 ,从而添加另一组风味剂名称和数量选择。

由于风味的数量(及其数量)是动态的,因此我需要在通过AJAX发布表单之前对这些值进行哈希处理。

如何为下面的JSON示例创建构造函数,以便可以通过JSON.stringify()将用户值发布到我的PHP脚本中

我遵循的基本JSON格式(认为):

var flavorSelection {
  flavor1 : ["Bacon", "1"],
  flavor2 : ["Cheezy", "2"],
  flavor3 : ["Cheezy", "1"]
}

样本选择字段

<div>
<select name="flavors">
    <option name="bacon" value="bacon">Bacon</option>
    <option name="cheezy" value="cheezy">Cheezy</option>
</select>
<select name="qty">
    <option name="1" value="1">1</option>
    <option name="2" value="2">2</option>
</select>
</div>

您需要调整html标记以将数组发送到服务器

<div>
<select name="flavors[]">
    <option name="bacon" value="bacon">Bacon</option>
    <option name="cheezy" value="cheezy">Cheezy</option>
</select>
<select name="quantities[]">
    <option name="1" value="1">1</option>
    <option name="2" value="2">2</option>
</select>
</div>

不确定这是否是最好的方法,但是您将需要依靠数组索引来配对数据。

您可以通过以下方式轻松循环并构建json:

$flavors = $_POST['flavors'];
$quantities = $_POST['quantities'];

$json = array();

for($i = 1; $i <= count($flavors) $i++){
    $json[] = array('flavor'.$i => array( 
                         flavors[$i], quantities[$i]  
                    ));
}

echo json_encode($json);

这将为您提供所需的json,但是我不了解哈希。

您可以这样做:

<div>
<select name="flavors[]">
    <option name="bacon" value="bacon">Bacon</option>
    <option name="cheezy" value="cheezy">Cheezy</option>
</select>
<select name="qty[]">
    <option name="1" value="1">1</option>
    <option name="2" value="2">2</option>
</select>
</div>

在PHP中,当您在表单输入名称后使用[]时, $_POST["field_name"]将收到一个数组。

那么,如果您有3种不同的口味,您的$_POST["flavors"]将收到一个值分别为“ flavor one”,“ flavor 2”,“ flavor 3”的数组。

并且您的$_POST["qty"]将以相同的顺序接收包含各种风味的数组。

然后,您使用jQuery.serialize()格式化表单数据以使用jQuery.ajax()提交。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM