0

作为我的主题/标题。这是我的代码

$(document).on("keyup","[name=BNAM]",function(){
    var nam = $(this).attr("name");
    var val = $(this).val();
    var typ = $(this).prev().val();

    $.post(
        "pro/bulletins_handle.php",
        {BTN:"QCHKNAM",BTYP:typ,BNAM:val},
        function(data){ 
        alert(nam+":"+val+":"+data); //display to check the return value of data
        var reTURN = data; //assign data into reTURN
            alert($(this).html());//Error: it say undefined
        });
    alert(reTURN); //Error: reTURN is not defined
});

** 我的帖子返回值为 0 或 1 **


问题:
1)。如何从 $.post 函数中检索返回值?
2)。为什么它说未定义?$(this) 不是 = [name=BNAM] ??

4

2 回答 2

3

首先,您必须将行alert(reTURN);向上移动到函数(数据)块中。该函数中的代码将在数据成功加载后执行。由于 js 的异步特性,下面的代码(即使它在下面)将在数据准备好之前执行。

此外,您在 $.post 块中使用的 this 变量并不代表您的想法。此代码应该更好地工作:

$(document).on("keyup","[name=BNAM]",function(){
    var $this = $(this);
    var nam = $this.attr("name");
    var val = $this.val();
    var typ = $this.prev().val();

    $.post(
        "pro/bulletins_handle.php",
        {BTN:"QCHKNAM",BTYP:typ,BNAM:val},
        function(data){ 
            alert(nam+":"+val+":"+data); //display to check the return value of data
            alert($this.html());
            alert(data);
        });    
});
于 2013-01-28T03:08:36.043 回答
2

1

所有 ajax 请求(包括$.post异步执行。这意味着可能在请求之后但在回调之外的任何代码部分很可能会在 ajax 请求完成之前执行,并且您不能依赖对该数据的访问。

如果要使用数据,必须在 ajax 请求的回调中使用。

2

this在上面的上下文中是一个 jQuery XMLHttpRequest 对象,而不是一个DOM元素。它没有html方法。做这样的事情:

$(document).on('keyup', '[name=BNAM]', function () {
   var $this = $(this);
   //$this is now available as the DOM element in the ajax callback
于 2013-01-28T02:43:04.800 回答