我有一个神秘的问题......我尝试将外部页面的一部分放入变量中。 这是代码:
$.get(url, function( data ) {
title = $(data).find('#layout-column_column-1 .journal-content-article').html();
}, 'html');
alert(title);
在我的浏览器上使用javascript控制台(这是Chrome,但在其他浏览器上也是如此),当我执行此代码一次时,alert(title)
会返回“undefined”。然后,如果我再次运行它(或只是行alert(title)
),我得到了我期望的结果。
有人有想法吗? :)
编辑: 抱歉,我提供的代码不完整:
var a = $('a[target="_faq"]');
a.each( function() {
[...]
var title;
$.get('url', function( data ) {
title = $(data).find('#layout-column_column-1 .journal-content-article').html();
}, 'html');
$(this).attr('title', title);
}
答案 0 :(得分:2)
这就是异步的意思。
$.get(url, function( data ) {
title = $(data).find('#layout-column_column-1 .journal-content-article').html();
alert(title);
}, 'html');
这意味着发送请求(或者更确切地说是接收响应)将从正常执行流程中取出。
大力推荐@Felix的好答案:How do I return the response from an asynchronous call?。
答案 1 :(得分:2)
这是因为$ .get()发出一个异步处理的ajax请求,这意味着一旦发送请求,下一个脚本就会被执行而不等待响应。
它正在进行第二次尝试,因为title
是一个全局变量。发送第一个请求时,警报显示undefined
,然后当响应返回时,将title
变量的值更新为返回值。当第二次尝试时,请求再次发送,但是当执行警报时,标题已经使用第一个请求中的值进行更新,以便显示
在任何异步处理中,异步活动返回的值必须由回调方法处理。
答案 2 :(得分:1)
get
方法(以及ajax
和post
)在“另一个线程”中执行(引用之间因为javascript不是多线程的)。
调用get
方法,然后开始执行请求,代码前进到alert(title)
,它位于异步方法之外,因此在第一个结束之前执行。< / p>
将警告置于 get
内。问题解决了