将数据移动到$ .ajax了?

时间:2012-01-23 12:50:23

标签: javascript jquery global-variables

我想将“数据”变量移出其他操作的成功函数。

$("a[class=note]").click(function( evt ){
                    var note = $(this).attr("value");
                    var preid = $(this).attr("id");
                    $.ajax({
                        type: 'GET',
                        url: 'style/ajax.php',
                        data: 'do=note&value=' + note + '&preid=' + preid,
                        success: function(data)
                        {
                            alert(data);
                        }
                    });
                });

例如php有Global pharase ..

3 个答案:

答案 0 :(得分:2)

$("a[class=note]").click(function( evt ){
                    var note = $(this).attr("value");
                    var preid = $(this).attr("id");
                    $.ajax({
                        type: 'GET',
                        url: 'style/ajax.php',
                        data: 'do=note&value=' + note + '&preid=' + preid,
                        success: function(data)
                        {
                            window.data = data;
                        }
                    });
                });

当然,在回调开始之前你不能使用它。

答案 1 :(得分:2)

在所有代码之上定义var data = null;,这将是全局变量。之后,重命名流程函数的参数和函数体window.data = response;

修改

您可以定义触发数据更改的功能,例如:

var data = null;

function setGlobal(v) {
    window.data = v;
    alert(window.data);
}

$("a[class=note]").click(function( evt ){
    var note = $(this).attr("value");
    var preid = $(this).attr("id");
    $.ajax({
        type: 'GET',
        url: 'style/ajax.php',
        data: 'do=note&value=' + note + '&preid=' + preid,
        success: function(data){
            setGlobal(data);
        }
    });
});

试试吧......

答案 2 :(得分:2)

全局变量(这是更糟糕的解决方案,但这是你要求的):

$("a.note").click(function( evt ){
                var note = $(this).attr("value");
                var preid = $(this).attr("id");
                $.ajax({
                    type: 'GET',
                    url: 'style/ajax.php',
                    data: 'do=note&value=' + note + '&preid=' + preid,
                    success: function(data)
                    {
                        window.data = data;
                        alert(data);
                    }
                });
            });

全局变量是危险的,也许在成功范围之外变量就足够了? 在success回调之外的Var:

$("a.note").click(function( evt ){
                var note = $(this).attr("value");
                var preid = $(this).attr("id");
                var dataFromServer = null;
                $.ajax({
                    type: 'GET',
                    url: 'style/ajax.php',
                    data: 'do=note&value=' + note + '&preid=' + preid,
                    success: function(data)
                    {
                        dataFromServer = data;
                        alert(data);
                    }
                });
            });

最后一个选项是拥有一个隐藏的输入来存储数据;

                    success: function(data)
                    {
                        $('#hiddenFieldId').val(data);
                        alert(data);
                    }

需要注意的事项:

  1. 我将您的选择器从a[class=note]更改为a.note,这样更好。
  2. success回调,这意味着在响应到达客户端之前不会触发,直到那时你的global \ outside var \ hidden输入值将为null。如果您不希望ajaxasynchronous,可以在以下选项中进行定义:

  3.   $.ajax({
        async: false, //  <---
        type: 'GET',
        url: 'style/ajax.php',
        data: 'do=note&value=' + note + '&preid=' + preid,
        success: function(data)
        {
            dataFromServer = data;
            alert(data);
        }
    });