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,在success调用中,不指向 DOM 对象。它指向一个包含 AJAX 调用设置的对象。

您需要context在 AJAX 调用中使用该属性来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 回答