$ .get()不起作用,后续工作

时间:2013-07-24 07:31:39

标签: jquery

我有一个神秘的问题......我尝试将外部页面的一部分放入变量中。 这是代码:

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

3 个答案:

答案 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方法(以及ajaxpost)在“另一个线程”中执行(引用之间因为javascript不是多线程的)。

调用get方法,然后开始执行请求,代码前进到alert(title),它位于异步方法之外,因此在第一个结束之前执行。< / p>

将警告置于 get内。问题解决了