0

私はjqueryにかなり慣れていないので、この問題を理解できないようです。

フォーム入力の動的な値を持つフォームから、以下のコードでキーと値のペアを動的に設定する方法を理解する必要があります。キーと値のペアを手動で追加すると、コードは機能しますが、ユーザーが作成したフォーム名がどうなるかは常にわかりません。

以下のコードの中央セクションにある注意事項を参照してください。$_POST 値として渡すために .serialize() の値を使用しようとしています。

var formValues から現在取得している値は次のとおりです。

ID=10&user_login=test9&wplp_referrer_id=&&block_unblock=u

ただし、次を使用して関数の値を取得しようとすると:

$user_id = $_POST['ID'];

「10」の ID が $user_id に設定されていません。これは、シリアル化された結果を渡すために使用している構文またはメソッドが以下で正しくないことを示しています。

jQuery(document).ready( function($) {

        $("#wplp_edit_member").submit( function() {

            var formValues = $("#wplp_edit_member").serialize(); //Get all the form input values    

            alert(formValues); //Check form values retrieved for testing only

            var numbers = /^[0-9]+$/;

            // Validate fields START
            var wplp_referrer_id = $("#wplp_referrer_id").val();

            if( !wplp_referrer_id.match(numbers) ) {

                alert("Please enter a numeric value");
                return false;

            }

            // Validate fields END

            $("#ajax-loading-edit-member").css("visibility", "visible");

            // Post data to ajaxurl
            $.post(ajaxurl, {

                action: "wplp_edit_member", //Call the PHP function to update/save form values

                data: formValues, //Use data to pass form field values as $_POST values to the function above

                // No More manual inputs of form fields to be passed
                //ID:$("#ID").val(),

                //user_login:$("#user_login").val(),

                //wplp_referrer_id:$("#wplp_referrer_id").val(),

                //block_unblock:$("#block_unblock").val(),

            }, 

            // Success
            function(data) {

                $("#ajax-loading-edit-member").css("visibility", "hidden");
                //alert("Member Updated");
                //document.location.reload();

            }

        );

        return false;

    });

}); 

ありがとう!

4

3 に答える 3

1

データを json として投稿する場合は、$.fn.serialize() のバリエーションを使用できます。jquery 拡張機能を追加します。

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};

そして、それを次のように使用します。

var data = $('#some-form').serializeObject(); //the dynamic form elements.
data.action = "wplp_edit_member";

$.post(ajaxurl, data, function(data) {
    $("#ajax-loading-edit-member").css("visibility", "hidden");
    //alert("Member Updated");
    //document.location.reload();
});

json を投稿する必要がない場合は、 $.fn.serializeArray を使用できます。

お役に立てれば。

于 2013-07-25T04:56:02.477 に答える
0

必要なのは、javascript オブジェクトにプロパティを動的に追加することです。これを行う方法はウェブ全体にありますが、ここでも示されています。

動的に名前が付けられたプロパティを JavaScript オブジェクトに追加することは可能ですか?

したがって、あなたの場合、呼び出す前に最初にオブジェクトを設定します.post:

var formData = {};
for (...) {
  formData[...] = ...;
}

$.post(ajaxurl, formData, function (data) {
  ...
});

<form>上記の繰り返しを実現する 1 つの方法は、タグ間のすべての入力から値を収集することです。

$('form input').each(function ($input) {
    formData[$input.attr('name')] = $input.val();
});

この猫の皮を剥ぐ方法はたくさんあります。また、jQuery には、ここで役立つ可能性のあるプラグインがたくさんありますが、通常は YAGNI (あなたはそれを必要としない) であるため、KISS (Keep It Simple, Stupid) だけです。

于 2013-07-25T04:30:04.777 に答える