-1

我有一个可以正常工作的 AJAX 函数,但我似乎无法访问我在页面后面的函数中声明的变量。如果您查看下面的代码,您会看到我提醒函数中的变量 number_rows 有效,但是当我尝试在函数外部记录它时,它返回为“未定义”。

var newData = "user_id=" + id;

    $.ajax({
        type: 'POST', // HTTP method POST or GET
        url: 'ajax.php', //Where to make Ajax calls
        dataType:'text', // Data type, HTML, json etc.
        data:newData, //post variables
        success:function(response){

            var number_rows = response;
           alert(number_rows);

        },
        error:function (xhr, ajaxOptions, thrownError){
            alert(xhr + " " + ajaxOptions + " " + thrownError); //throw any errors
        }
    });

console.log(number_rows);

我知道我的范围可能已经关闭。我试图在成功函数中移动我的所有代码,但这会导致一堆其他问题,所以最简单的方法是将响应变量作为一个全局变量,我可以在页面的其余代码中使用它。我也尝试过这样的事情:

success:function(response){

        $('body').append('<span class="ajax_response" id="' + response + '"></span>');

    }

var number_rows = $('.ajax_response').attr('id');
console.log(number_rows);

但由于某种原因,它不能以这种方式立即获取 ID 值。我可以确认跨度确实使用正确的 ID 值生成,但由于某种原因它不能正确处理它。对此的任何帮助将不胜感激。

谢谢!

4

3 回答 3

-2

是的,您的范围已关闭。如果您在函数内部定义变量,就像您所做的那样,您无法在外部访问它。此外,您的 ajax 调用是异步的,您可以使用任何代码。

将您的 console.log 放在成功函数中,否则即使您在函数外部全局声明变量,它也可能会记录 undefined。

var newData = "user_id=" + id;
var number_rows;
$.ajax({
    type: 'POST', // HTTP method POST or GET
    url: 'ajax.php', //Where to make Ajax calls
    dataType:'text', // Data type, HTML, json etc.
    data:newData, //post variables
    success:function(response){
        number_rows = response;
        alert(number_rows);
        console.log(number_rows); // here, so we are sure it's set. 
        },
        error:function (xhr, ajaxOptions, thrownError){
            alert(xhr + " " + ajaxOptions + " " + thrownError); //throw any errors
        }
    });
于 2013-09-12T18:49:56.333 回答
-2

只需添加到您的配置中:

async:false

您的代码可能如下所示:

var newData = "user_id=" + id;
var number_rows = ""; //This is a global variable

    $.ajax({
        type: 'POST', 
        url: 'ajax.php',
        dataType:'text', 
        data:newData,
        async:false, //<------This is the option you must add
        success:function(response){

            number_rows = response;  //<----- receive data from the server
           alert(number_rows);

        },
        error:function (/*stuff here*/){
            //stuff here
        }
    });

  //Check data
   console.log(number_rows); 

祝你好运^^!

于 2013-09-12T18:54:37.663 回答
-2

更改了变量的范围。
更改async: false或等到您从服务器获得响应,然后使用该值。

var newData = "user_id=" + id;
var number_rows = "";  //Declare Here

    $.ajax({
        type: 'POST', // HTTP method POST or GET
        url: 'ajax.php', //Where to make Ajax calls
        dataType:'text', // Data type, HTML, json etc.
        data:newData, //post variables
        async: false,
        success:function(response){

            number_rows = response;  //assign here
           alert(number_rows);

        },
        error:function (xhr, ajaxOptions, thrownError){
            alert(xhr + " " + ajaxOptions + " " + thrownError); //throw any errors
        }
    });

console.log(number_rows);  //Use here
于 2013-09-12T18:43:36.737 回答