碰见个问题,话不多说直接上题
         var major_name = $('#major_name').val();
var rtnvalue="";
if(major_name != ""){
$.post("<?php echo site_url(ADMIN_ROOT.'exam/major/ck_major');?>",{
ck_major_name : major_name,
},function(data){
if(data == "ok")
{
$("#a_artist").hide();
$("#b_artist").show();
$("#c_artist").hide();
}
else
{
$("#a_artist").show();
$("#b_artist").hide();
$("#c_artist").hide();
rtnvalue=true;
alert(rtnvalue+"cao ");
}
}
);
}
else{
$("#a_artist").hide();
$("#b_artist").hide();
$("#c_artist").show();
}
alert(rtnvalue);
return rtnvalue;         比如这样吧,不管rtnvalue里面怎么变,外面都没值的?按道理不是它属于里面那个函数的范围内吗,也应该有效的啊。求详解
          我自己刚才 换成PHP也写了边,依然是这样。作用域不是我想象的那样吗。求详解

解决方案 »

  1.   

    alert(rtnvalue);
    return rtnvalue;这不是在函数外面么?有这么用的么?
      

  2.   

    如果你光运行上面的代码,jquery ajax的post的参数function(data)没执行吧。
      

  3.   

    function ck_major_name()
    {var major_name = $('#major_name').val();
    var rtnvalue=false;
    if(major_name != ""){
    $.post("<?php echo site_url(ADMIN_ROOT.'exam/major/ck_major');?>",{
    ck_major_name : major_name,
    },function(data){
    if(data == "ok")
    {
    $("#a_artist").hide();
    $("#b_artist").show();
    $("#c_artist").hide();
    }
    else
    {
    $("#a_artist").show();
    $("#b_artist").hide();
    $("#c_artist").hide();
    rtnvalue=true;
    }
    }
    );
    }
    else{
    $("#a_artist").hide();
    $("#b_artist").hide();
    $("#c_artist").show();
    }
    alert(rtnvalue);
    return rtnvalue;
    }这是完整的,不管我在2个判断语句里面让它都变true。出来还是没反应
      

  4.   


    <script language="javascript">  
    var major_name = $('#major_name').val();
    var rtnvalue="";
    if(major_name != ""){
    $.post("url",{""},function(data){
    if(data == "ok"){
    $("#a_artist").hide();
    $("#b_artist").show();
    $("#c_artist").hide();
    }else{
    $("#a_artist").show();
    $("#b_artist").hide();
    $("#c_artist").hide();
    rtnvalue=true;
    alert(rtnvalue+"cao");
    }
    });
    }else{
    $("#a_artist").hide();
    $("#b_artist").hide();
    $("#c_artist").show();
    }
    alert(rtnvalue);//ajax异步请求,你这里shu的出来才怪了
    return rtnvalue;//你看看return 在哪里,是在函数的外面啊,return要用在表达式中,你直接return没有任何意义
    </script>
      

  5.   

    ajax是异步的,在你没有设置同步的前提下,它不影响下面的程序的执行,也就是说,你的ajax还没返回呢,下面的代码已经执行了,所以没等到返回你,你都输出了,劝你用同步ajax
      

  6.   

    我是2个函数重叠,我把完整的代码发出来了。你看看。return是最外面函数返回的。不在那里在哪
      

  7.   

    ck_major_name:major_name
    ck_major_name 要用双引号引住,它是参数名。
      

  8.   

    另外,楼主,我给你写个例子,你运行下就知道了(照着注释)
    <?php
    if($_GET){
    echo $_GET['text'];exit;
    }else if($_POST){
    echo $_POST['text'];exit;
    }
    ?><input type="text" id="text" value="我是中国人">
    <input type="button" name="button" value="myAjax" onclick="post_test()"><script language="javascript">
    var response_text = "";
    var request;
    function createxmlHttpRequest(){
    if(!request){
    if(window.XMLHttpRequest){
    request = new XMLHttpRequest();
    }else{
    request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    }function post_test(){
    createxmlHttpRequest();
    var url = "test.php";
    var send = "text=" + encodeURI(document.getElementById("text").value);
    request.open("post", url, false);//异步同步 同步异步
    request.onreadystatechange = callback;
    request.setRequestHeader("content-type", "application/x-www-form-urlencoded");
    request.send(send);
    alert(response_text);//设置上面的 同/异 步看看这块的区别
    }function callback(){
    if (request.readyState == 4){
    if (request.status == 200){
    response_text = request.responseText;
    }else if(request.status == 404){
    alert("该路径未找到");
    }else if(request.status == 403){
    alert("禁止访问");
    }else{
    alert("status is " + request.status);
    }
    }
    }</script>
      

  9.   

    false为同步,默认为true(异步),楼主需要的是同步