2012-07-09 73 views
0

首先,我是新来的PHP和JavaScriptJavaScript数组串JSON

我有一个web表单,用户可以添加多个联系人ANS发送到服务器疗法。

由于一些原因,我不能使用正常的html元素来存储值,所以我使用数组来存储值。

//init array 

var contacts = new Array(); //contact array 

var tempArray = new Array(); //temp array to store current contacts 

//getting the contact info and setting to a temp array 

tempArray = { 
     name:"username", 
     age:12, 
     sex:false 
    }; 

//push the content to the `contacts` array 

contacts.push(tempArray); 

我增加了许多接触到contacts阵列,现在我需要将阵列提交给服务器。

问题

我使用Codeignitor和Malsup FORM插件。

按malsup我可以配置数据选项,这样

var options = { 

dataType:'json', //type of data 
data:[contactArray:contacts], //additional parm 

    }; 

ajaxSubmit选项,我可以给这个选项作为PARM。

当我做到这一点我收到以下错误

uncaught exception: [Exception... "Component returned failure code: 0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA) [nsIDOMFormData.append]" nsresult: "0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA)" location: "JS frame :: /js/form.js :: fileUploadXhr :: line 224" data: no] 
temp/jquery.min.js 
Line 4 

IT jQuery中与$.POST的作品。

所以我试图JSON.stingify()将数据转换为字符串。

,但在服务器上我得到这样

'contactArray' => string '[{"name":"username","sex":"12","sex":"false"}]' 

如果我使用的json_decode然后我不能使用表单验证。

我想使用CODEIGNITOR中的FORM VALIDATION LIBRARY。

CI支持验证元素数组。

所以

,如果我得到的东西像name[],age[],sex[]的话,我可以很容易地验证。

请帮我解决问题或给我建议。

谢谢。

+1

'数据:[contactArray:联系人]'是不是有效的JavaScript。你可能的意思是'data:{contactArray:contacts}' – Utkanos 2012-07-09 11:07:07

+0

我正在查找像这样的选项的数据选项[“data”] = {contactsArray:contacts}; – Red 2012-07-09 11:15:57

回答

1

此代码不会创建一个数组:

tempArray = { 
     name:"username", 
     age:12, 
     sex:false 
    }; 

它创建了一个对象(完全覆盖空白数组指定给tempArray更早)。

如果我得到像名字[],年龄[],性别[]然后我可以很容易地验证。

如果需要,您可以创建看起来像这样的发布数据,作为发送数据之前的准备步骤。这是相当容易::

function prepContacts(contacts) { 
    var result = []; // Build up string in array, we'll join at the end 
    var nameKey, ageKey, sexKey; 

    // I've put [] in these because you use PHP 
    nameKey = encodeURIComponent("name[]"); 
    ageKey = encodeURIComponent("age[]"); 
    sexKey = encodeURIComponent("sex[]"); 

    for (index = 0; index < contacts.length; ++index) { 
     contact = contacts[index]; 
     result.push(nameKey + "=" + encodeURIComponent(contact.name)); 
     result.push(ageKey + "=" + encodeURIComponent(contact.age)); 
     result.push(sexKey + "=" + encodeURIComponent(contact.sex)); 
    } 

    return result.join("&"); 
} 

然后张贴通过$.ajax

$.ajax({ 
    url: "/path/to/resource", 
    type: "POST", 
    data: prepContacts(contacts), 
    success: function(response) { 
     // POST worked, but you have to check response for whether 
     // it worked at the logic level 
    }, 
    error: function() { 
     // POST failed 
    } 
}); 
+0

非常感谢..但作为一个新手我不得不问这个.. :)所以首先我需要创建一个联系对象..然后转换为数组,对吧? – Red 2012-07-09 11:19:57

+0

@垃圾:上面并没有将它转换为数组,它将它转换为一个POST数据字符串,它将具有名称,年龄和性别的平行条目。 (例如,姓名[0],年龄[0]和性别[0]全部用于同一联系人。)您将继续按照您的习惯(一组对象)构建联系人列表,但是随后使用此准备步骤发送到服务器时。 – 2012-07-09 11:33:33

+0

是的,我得到了..但我从服务器得到奇怪的结果..'0 =>字符串'n'(长度= 1) 1 =>字符串'a'(长度= 1) 2 =>字符串'米'长度= 1 3 =>字符串'e'(长度= 1) 4 =>字符串'%'(长度= 1) 5 =>字符串'5'(长度= 1) 6 =>字符串'''长度= 1 7 =>字符串'%'(长度= 1) 8 =>字符串'5'(长度= 1) 9 =>字符串'D'(长度= 1) 10 = > string'='(length = 1) 11 => string'1'(length = 1)' – Red 2012-07-09 11:49:42