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

Javascript and Jquery mixing, what happens first?

本文关键字:什么 Jquery 混合 Javascript      更新时间:2023-09-26

我很抱歉问了这么一个简单的问题,但是在谷歌上搜索"javascript还是jquery "总是有人问我应该先学哪个。

目前我有几行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输出undefined。(注意,console.log并不是实际的语句,我有更多的行需要在这之后执行,这只是一个无序执行的示例。)我想知道是否有人可以澄清或解释我如何改变每一个步骤的执行。

简单的ans:

这只是因为你的$.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);
  });

让我们在这里弄清楚一些事情。$.get()$.ajax()在jQuery中的包装器。所应用的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的$. deferred,但这可能是完全不同的。

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