V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
reloop
V2EX  ›  JavaScript

新手 , JQuery 调用函数 返回 undefined 哪里写错了么?

  •  
  •   reloop · 2013-08-23 17:14:24 +08:00 · 3873 次点击
    这是一个创建于 3891 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想弄个小工具,学习中..
    不知道是不是我理解的不对
    现在的情况是 , 我在第 2 段调用第1段 , 返回 undefined


    function findQuery(nameId)
    {
    $.get("search.xml",function(searcher){
    var query="";
    $(searcher).find("item").each(function(){
    if( $(this).find("name").attr("id") == nameId )
    {
    query = $(this).find("query").text();
    }
    });
    return query;
    });
    }



    $(document).ready(
    function (){
    $(".searcher").click(function(){

    var nameId = $(this).attr("way");

    var query = findQuery(nameId);
    alert(query); //返回 undefined
    })}
    )

    ----------------------------------------------------
    我是觉的 findQuery() 应该没有错 , 因为下面这段代码可以正确执行

    $( //这个符号是什么意思?
    function getWay (way) {
    var p="";
    $.get("search.xml",function(data){
    $(data).find("item").each(function(){
    if ($(this).find("name").attr("id") == "12345")
    {
    p = $(this).find("query").text();
    return false;
    }
    });
    alert( p );
    });
    });

    如果没有错的话是不是我哪里理解错了?
    7 条回复    1970-01-01 08:00:00 +08:00
    zzNucker
        1
    zzNucker  
       2013-08-23 17:18:38 +08:00
    可能是alert的时候get还没取回结果
    后面那个例子的alert是放在回调函数里的
    reloop
        2
    reloop  
    OP
       2013-08-23 17:25:52 +08:00
    @zzNucker
    那该怎么做?
    我发现 如果把第 1 段 的 return query; 改成 alert(query); 是可以弹出数据的
    reloop
        3
    reloop  
    OP
       2013-08-23 17:28:29 +08:00
    @zzNucker
    我把 第2段 alert(query); 改为
    setTimeout(function(){alert(query);},3000);
    还是不对
    davepkxxx
        4
    davepkxxx  
       2013-08-23 17:30:09 +08:00   ❤️ 1
    用$.ajax代替$.get,async设为false。
    reloop
        5
    reloop  
    OP
       2013-08-23 17:58:07 +08:00
    @davepkxxx
    改成这样 , 还是不能返回
    function findQuery2(nameId)
    {
    $.ajax({
    async:false,
    type: "POST",
    dateType:"XML",
    url: "search.xml",
    success: function(searcher){
    var query="";
    $(searcher).find("item").each(function(){
    if( $(this).find("name").attr("id") == nameId )
    {
    query = $(this).find("query").text();
    alert(query); //这个能显示正确结果
    }
    });
    return query;
    },
    error: function() { }
    });
    }

    $(document).ready(
    function (){
    $(".searcher").click(function(){

    var nameId = $(this).attr("way");

    var query = findQuery2(nameId);
    alert(query); //这个还是不行
    })}
    )
    davepkxxx
        6
    davepkxxx  
       2013-08-23 18:00:10 +08:00   ❤️ 1
    在$.ajax之前设置声明一个变量,在ajax的callback中为这个变量赋值,$.ajax之后在函数中return这个变量。
    reloop
        7
    reloop  
    OP
       2013-08-23 18:05:40 +08:00
    @davepkxxx
    非常感谢!!! 可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   946 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:58 · PVG 05:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.