0

首先,我是 php 和 javascript 的新手

我有一个网络表单,用户可以在其中添加多个联系人并发送到服务器。

由于某些原因,我不能使用普通的 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选项上,我可以将此选项作为参数。

当我这样做时,我收到以下错误

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

它适用$.POST于 jQuery。

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

但是在服务器上我变得像这样

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

如果我使用了,json_decode那么我不能使用表单验证。

我想在 CODEIGNITOR 中使用表单验证库。

CI 支持元素数组的验证。

所以

如果我得到类似的东西,name[],age[],sex[]那么我可以轻松验证。

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

谢谢你。

4

1 回答 1

1

此代码不创建数组:

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

它创建一个对象(完全覆盖您之前分配的空白数组tempArray)。

如果我得到类似 name[],age[],sex[] 的信息,那么我可以轻松验证。

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

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
    }
});
于 2012-07-09T11:08:26.370 回答