我为提出这样一个简单的问题而道歉,但谷歌搜索“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不是实际的声明,我有更多的行需要在此之后,它只是一个无序执行的例子。)想知道是否有人可以澄清或解释我怎么能在执行每个步骤时改变。
答案 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中的事件处理程序,超时,间隔等。