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

2013-08-23 17:14:24 +08:00
 reloop
想弄个小工具,学习中..
不知道是不是我理解的不对
现在的情况是 , 我在第 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 );
});
});

如果没有错的话是不是我哪里理解错了?
3881 次点击
所在节点    JavaScript
7 条回复
zzNucker
2013-08-23 17:18:38 +08:00
可能是alert的时候get还没取回结果
后面那个例子的alert是放在回调函数里的
reloop
2013-08-23 17:25:52 +08:00
@zzNucker
那该怎么做?
我发现 如果把第 1 段 的 return query; 改成 alert(query); 是可以弹出数据的
reloop
2013-08-23 17:28:29 +08:00
@zzNucker
我把 第2段 alert(query); 改为
setTimeout(function(){alert(query);},3000);
还是不对
davepkxxx
2013-08-23 17:30:09 +08:00
用$.ajax代替$.get,async设为false。
reloop
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
2013-08-23 18:00:10 +08:00
在$.ajax之前设置声明一个变量,在ajax的callback中为这个变量赋值,$.ajax之后在函数中return这个变量。
reloop
2013-08-23 18:05:40 +08:00
@davepkxxx
非常感谢!!! 可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/80015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX