0

まず第一に、私はphpとjavascriptに不慣れです

ユーザーがサーバーに送信する複数の連絡先を追加できるWebフォームがあります。

いくつかの理由により、通常の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とMalsupFORMプラグインを使用しています。

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

それはjQueryで$.POST動作します。

だから私JSON.stingify()はデータを文字列に変換しようとしました。

しかし、サーバー上では私はこのようになっています

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

使用したjson_decode場合、フォーム検証を使用できません。

CODEIGNITORのFORMVALIDATIONLIBRARYを使用したい。

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 に答える