1

I've got a mysterious problem ... I try to take a part of an external page and put it in a variable. Here is the code :

$.get(url, function( data ) {
     title = $(data).find('#layout-column_column-1 .journal-content-article').html();
}, 'html');
alert(title);

Using the javascript console on my browser (which is Chrome but that's the same on others), when I execute this code once, the alert(title) returns "undefined". Then if I run it again (or just the line alert(title)), I've got the result I expected.

Anyone has an idea ? :)

EDIT : sorry, the code I gave was not complete :

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);
}
4

3 回答 3

2

这就是异步的意思。

$.get(url, function( data ) {
     title = $(data).find('#layout-column_column-1 .journal-content-article').html();
     alert(title);
}, 'html');

这意味着发送请求(或者更确切地说是接收响应)从正常的执行流程中取出。

强烈推荐@Felix 的好答案:如何从异步调用中返回响应?.

于 2013-07-24T07:33:01.093 回答
2

这是因为 $.get() 发送了一个 ajax 请求,该请求是异步处理的,这意味着一旦发送请求,下一个脚本将被执行,而无需等待响应。

它正在第二次尝试中工作,因为title这里是一个全局变量。当发送第一个请求时,会显示警报undefined,然后当响应返回时,将title变量的值更新为返回值。当进行第二次尝试时,请求会再次发送,但是当警报执行时,标题已经更新为第一次请求中的值,因此它会被显示

在任何异步处理中,异步活动返回的值必须由回调方法处理。

于 2013-07-24T07:33:33.627 回答
1

get方法(以及ajaxand post)在“另一个线程”中执行(在引号之间,因为 javascript 不是多线程的)。

调用该get方法,然后开始执行请求,然后代码继续执行到您alert(title)的异步方法之外,因此在第一个方法结束之前执行。

将您的警报放在get. 问题解决了

于 2013-07-24T07:34:56.757 回答