如何从$ .post函数中检索返回值

时间:2013-01-28 02:38:24

标签: jquery

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

$(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] ??

2 个答案:

答案 0 :(得分:3)

首先,您必须将alert(reTURN);的行移到函数(数据)块中。成功加载数据时,将执行此函数中的代码。下面的代码(即使它在下面)将在数据准备好之前执行,因为js的异步性质。

此外,您在$ .post块中使用的此变量并不意味着您的想法。这段代码应该更好用:

$(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);
        });    
});

答案 1 :(得分: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