2

私は一日中この問題で頭を悩ませています。私は JavaScript について十分な知識がなく、DOM 操作のために jQuery を使い始めました。いくつかの基本的なものを構築するのは簡単です。私が望んでいたのは、この関数に渡す入力パラメーターに基づいてデータベースから引き出されるリストをフォームに入力するカスタム関数を作成することです。

コードは次のようになります。

(function($) {
        $.fn.multiSelect = function(a,b,c) {
        var someVar1 = parseInt(a,10);
        var someVar2 = parseInt(b,10);
        var someVar3 = c;
        var dataString = "a=" + someVar1 + "&b=" + someVar2 + "&c=" + someVar3;
        $.ajax({
            type:       "POST",
            url:        "test_ajax.php",
            data:       dataString,
            dataType:   'json',
            success:    function(data) {
                var a1 = data['a'];
                var b1 = data['b'];
                var c1 = data['c'];
                return $(this).html('<p>' + a1 + b1 + c1 + '</p>');
            }
        });
        return $(this).html('<p>' + someVar1 + someVar2 + someVar3 + '</p>');
    }
    };
}) (jQuery);

また、test_ajax.php 内の PHP コードは次のとおりです。

<?php
if(isset($_POST['a']) AND !empty($_POST['a'])) {
    $_something = array(
                    'a'=> $_POST['a'],
                    'b'=> $_POST['b'],
                    'c'=> $_POST['b']
                    );
    echo json_encode($_something);
}
?>

jQuery 関数を次のように使用すると、次のようになります。

$('#someDiv').multiSelect(1,1,'user');

$.(ajax) 側の関数は何も返さず、その外側 (関数に渡されるものを確認するために作成したもの) は「11user」を返します。

上記のコードを次のように使用すると:

$(function() {
    var dataString = 'a=' + 1 + '&b=' + 1 + '&c=user';
    $.ajax({
            type:       "POST",
            url:        "test_ajax.php",
            data:       dataString,
            dataType:   'json',
            success:    function(data) {
                var a1 = data['a'];
                var b1 = data['b'];
                var c1 = data['c'];
                $('#someDiv').html('<p>' + a1 + b1 + c1 + '</p>');
            }
        });
});

test_ajax.php スクリプトからデータをフェッチします。これはすべて、問題をトラブルシューティングするためだけに簡単です。次に、データベースでの仕事を行う複雑な PHP スクリプトを作成します。

私は、変数 (ローカル/グローバル) または不適切な jQuery 関数チェーンで何か間違ったことをしていると推測しています。

編集:この操作をさまざまなメニューで何度も繰り返すため、関数はより多くのロジックを作成し、コード全体を何度も繰り返します。

どんな助けでも大歓迎です。

4

1 に答える 1

1

私はあなたが言っていることはあなたの$.ajax呼び出し内のこの行が機能しないということだと思います:

return $(this).html('<p>' + a1 + b1 + c1 + '</p>');

これはthis、呼び出し内でsuccessDOMオブジェクトを指していないためです。これは、AJAX呼び出しの設定を含むオブジェクトを指します。

contextAJAX呼び出しでプロパティを使用して、this意味を理解する必要があります。

    $.ajax({
        type:       "POST",
        url:        "test_ajax.php",
        data:       dataString,
        dataType:   'json',
        context:    this,
        success:    function(data) {
            var a1 = data['a'];
            var b1 = data['b'];
            var c1 = data['c'];
            return $(this).html('<p>' + a1 + b1 + c1 + '</p>');
        }
    });
于 2012-05-22T21:17:54.430 に答える