我需要将对象序列化为JSON.我正在使用jQuery.是否有"标准"方法来做到这一点?
我的具体情况:我有一个定义如下所示的数组:
var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...
Run Code Online (Sandbox Code Playgroud)
我需要把它变成一个字符串传递给$.ajax()这样:
$.ajax({
type: "POST",
url: "Concessions.aspx/GetConcessions",
data: "{'countries':['ga','cd']}",
...
Run Code Online (Sandbox Code Playgroud) 我想在Backbone.js模型中对表单进行一些服务器前验证.为此,我需要将表单中的用户输入转换为可用数据.我发现了三种方法:
var input = $("#inputId").val();var input = $("form.login").serialize();var input = $("form.login").serializeArray();不幸的是,没有一个提供我需要的良好的可重用和可开发的JSON对象.我已经查看了Stack Overflow上的几个问题,但我发现只有一些额外的库.
不是Underscore.js,当前的jQuery或Backbone.js提供了一个帮助方法吗?
我无法想象没有这种功能的要求.
HTML
<form class="login">
<label for="_user_name">username:</label>
<input type="text" id="_user_name" name="user[name]" value="dev.pus" />
<label for="_user_pass">password:</label>
<input type="password" id="_user_pass" name="user[pass]" value="1234" />
<button type="submit">login</button>
</form>
Run Code Online (Sandbox Code Playgroud)
JavaScript的
var formData = $("form.login").serializeObject();
console.log(formData);
Run Code Online (Sandbox Code Playgroud)
输出
{
"name": "dev.pus",
"pass": "1234"
}
Run Code Online (Sandbox Code Playgroud)
Backbone.js模型
var user = new User(formData);
user.save();
Run Code Online (Sandbox Code Playgroud) 我将一些代码放在一起,以展平和展开复杂/嵌套的JSON对象.它有效,但它有点慢(触发'长脚本'警告).
对于我想要的扁平名称"." 作为数组的分隔符和[INDEX].
例子:
un-flattened | flattened
---------------------------
{foo:{bar:false}} => {"foo.bar":false}
{a:[{b:["c","d"]}]} => {"a[0].b[0]":"c","a[0].b[1]":"d"}
[1,[2,[3,4],5],6] => {"[0]":1,"[1].[0]":2,"[1].[1].[0]":3,"[1].[1].[1]":4,"[1].[2]":5,"[2]":6}
Run Code Online (Sandbox Code Playgroud)
我创建了一个基准,可以模拟我的用例http://jsfiddle.net/WSzec/
我想要更快的代码:为了澄清,在IE 9 +,FF 24+和Chrome 29 中完成JSFiddle基准测试(http://jsfiddle.net/WSzec/)的代码明显更快(~20%+会很好) +.
以下是相关的JavaScript代码:当前最快:http://jsfiddle.net/WSzec/6/
JSON.unflatten = function(data) {
"use strict";
if (Object(data) !== data || Array.isArray(data))
return data;
var result = {}, cur, prop, idx, last, temp;
for(var p in data) {
cur = result, prop = "", last = 0;
do {
idx = p.indexOf(".", last);
temp …Run Code Online (Sandbox Code Playgroud) 好的,所以我试图找出是否可以发布序列化()和表单之外的其他数据.
这是我的工作,但它只发送'wordlist'而不是表单数据.
$.post("page.php",( $('#myForm').serialize(), { 'wordlist': wordlist }));
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
我试图获取当前检查的所有复选框的值并将它们存储到数组中.到目前为止,这是我的代码:
$("#merge_button").click(function(event){
event.preventDefault();
var searchIDs = $("#find-table input:checkbox:checked").map(function(){
return $(this).val();
});
console.log(searchIDs);
});
Run Code Online (Sandbox Code Playgroud)
然而,这比我需要的更多.我不仅得到了价值,还有其他一些我不想要的东西.
["51729b62c9f2673e4c000004","517299e7c9f26782a7000003","51729975c9f267f3b5000002",prevObject:jQuery.fn.jQuery.init [3],context:document,jquery:"1.9.1",constructor:function,init:function ...]
我想要ID(在这种情况下前3项).
通过使用$.each值并将值推送到数组,我获得了所需的输出:
$("#find-table input:checkbox:checked").each(function(){ myArray.push($(this).val()); })
Run Code Online (Sandbox Code Playgroud)
["51729b62c9f2673e4c000004","517299e7c9f26782a7000003","51729975c9f267f3b5000002"]
但是我想使用$.map它,因为它为我节省了一行代码并且更漂亮.
谢谢
我不需要使用json字符串并使用$ .parseJSON,而是将对象存储在变量中,并将其存储为表示json的字符串.
(我正在处理的库需要格式错误的json类型,所以我需要弄乱它以使其工作.)
最好的方法是什么?
如何将HTML5 FormData对象转换为JSON?没有Jquery并像处理对象一样处理FormData中的嵌套属性.
我试过了jQuery('#form_id').serialize().这仅返回表单数据作为url编码的字符串.是否可以将表单数据作为对象?
当表单包含多个输入数组字段时,是否有更好的解决方案来转换已经由jQuery函数serialize()序列化的表单数据.我希望能够将表单数据转换为JSON对象以重新创建一些其他信息表.所以告诉我一个更好的方法来将序列化字符串转换为JSON对象.
<form id='sampleform'>
<input name='MyName' type='text' /> // Raf
<!--array input fields below-->
<input name='friendname[]' type='text' /> // Bily
<input name='fiendemail[]' type='text' /> // bily@someemail.com
<!--duplicated fields below to add more friends -->
<input name='friendname[]' type='text' /> // Andy
<input name='fiendemail[]' type='text' /> // Andy@somwhere.com
<input name='friendname[]' type='text' /> // Adam
<input name='fiendemail[]' type='text' /> // Adam@herenthere.com
</form>
Run Code Online (Sandbox Code Playgroud)
应用jquery方法获取数据
var MyForm = $("#sampleform").serialize();
/** result : MyName=Raf&friendname[]=Billy&fiendemail[]=bily@someemail.com&friendname[]=Andy&fiendemail[]=Andy@somwhere.com&friendname[]=Adam&fiendemail[]=Adam@herenthere.com
*/
Run Code Online (Sandbox Code Playgroud)
如何将此数据转换为JSON对象?它应该具有以下来自上述表单的示例JSON数据.
{
"MyName":"raf",
"friendname":[
{"0":"Bily"},
{"1":"Andy"},
{"2":"Adam"}
],
"friendemail":[
{"0":"bily@someemail.com"},
{"1":"Andy@somwhere.com"},
{"2":"Adam@herenthere.com"} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jQuery发送表单的数据.但是,数据无法到达服务器.你能告诉我我做错了什么吗?
<form id="contactForm" name="contactForm" method="post">
<input type="text" name="nume" size="40" placeholder="Nume">
<input type="text" name="telefon" size="40" placeholder="Telefon">
<input type="text" name="email" size="40" placeholder="Email">
<textarea name="comentarii" cols="36" rows="5" placeholder="Message"></textarea>
<input id="submitBtn" type="submit" name="submit" value="Trimite">
</form>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
<script type="text/javascript">
$(document).ready(function(e) {
$("#contactForm").submit(function() {
$.post("getcontact.php", $("#contactForm").serialize())
// Serialization looks good: name=textInNameInput&&telefon=textInPhoneInput etc
.done(function(data) {
if (data.trim().length > 0) {
$("#sent").text("Error");
} else {
$("#sent").text("Success");
}
});
return false;
})
});
</script>
Run Code Online (Sandbox Code Playgroud)
和服务器端:
$nume = $_REQUEST["nume"]; // $nume contains no data. Also tried $_POST
$email = $_REQUEST["email"]; …Run Code Online (Sandbox Code Playgroud) javascript ×8
jquery ×8
json ×3
ajax ×1
algorithm ×1
backbone.js ×1
form-data ×1
form-submit ×1
forms ×1
php ×1