Javascript和Jquery混合,先发生什么?

时间:2014-07-02 03:19:28

标签: javascript jquery

我为提出这样一个简单的问题而道歉,但谷歌搜索“javascript或jquery first”只是让我的人问他们应该先学习哪些。

目前我有几行javascript,接下来是一些jquery,然后是更多的javascript。这是它崩溃的部分......

$.get("alliances.php", function(data, status){
    console.log(data);
    searchIndex = data.search(allianceName);
    rawAllianceLink = data.slice(searchIndex-25,searchIndex);
});
console.log(rawAllianceLink);

在我执行此代码之后,JQuery最后一次,我的console.log打印未定义。 (注意,console.log不是实际的声明,我有更多的行需要在此之后,它只是一个无序执行的例子。)想知道是否有人可以澄清或解释我怎么能在执行每个步骤时改变。

3 个答案:

答案 0 :(得分:1)

简单的答案:

这仅仅是因为您的$.get(...AJAX来电。您必须在回调处理程序中记录您的数据。

$.get("alliances.php", function(data, status){
    console.log(data);
    searchIndex = data.search(allianceName);
    rawAllianceLink = data.slice(searchIndex-25,searchIndex);
})
  .done(function() {
    console.log(rawAllianceLink);
  });

答案 1 :(得分:1)

让我们在这里明白一些事情。 $.get()是jQuery中$.ajax()的包装器。正在应用的javascript发生在jQuery库中。

接下来,$.get调用是asynchronous,这意味着console.log(rawAllianceLink);可能会在$.get()请求完成之前触发,这需要一些时间来获取文件并读取数据。

仅在请求完全完成后,function(data, status)才会应用于从alliances.php返回的数据。在该回调函数中,您似乎已正确应用了您想要的javascript方法。

如果在回调执行发生后需要触发更多代码,那么你应该把它放到一个函数中并在最后执行函数,将rawAllianceLink作为参数传递,如下所示:

$.get("alliances.php", function(data, status){
    console.log(data);
    searchIndex = data.search(allianceName);
    rawAllianceLink = data.slice(searchIndex-25,searchIndex);
    process_request(rawAllianceLink);
});

function process_request(RAL){
    console.log(RAL);
}

现在将以正确的顺序触发事情。您也可以查看jQuery's $.defered,但这可能是另一个野兽。

答案 2 :(得分:0)

你的代码中发生了什么,是调用jQuery“get”函数,它向服务器发送请求以检索“alliances.php”中的一些信息,但它只是发送请求,它没有'等待响应,然后继续使用console.log。稍后,浏览器会从服务器获取响应,当浏览器有机会时,它会执行回调函数中的代码。这种编程并不是jQuery独有的,无论你是否使用jQuery,都会出现javascript中的事件处理程序,超时,间隔等。