Javascript jQuery AJAX回调函数不使用';我不能按预期工作:
我试图从AJAX调用的成功部分获取数据。因此,我试图为此编写一个回调函数。我有以下代码:Javascript jQuery AJAX回调函数不使用';我不能按预期工作:,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图从AJAX调用的成功部分获取数据。因此,我试图为此编写一个回调函数。我有以下代码: var data2; $(function () { function callback(data) { console.log(data); data2 = JSON.parse(data); console.log(data2); } $("myForm") .submit(function (event) {
var data2;
$(function () {
function callback(data) {
console.log(data);
data2 = JSON.parse(data);
console.log(data2);
}
$("myForm")
.submit(function (event) {
$.ajax({
type: 'POST',
url: "/...",
data: "JASON",
success: callback
});
});
console.log(data2);
});
在控制台中,我按顺序看到:
未定义
,数据的内容
和数据的内容2
我不明白的是,为什么一开始我的
没有定义?我不应该先获取数据的值吗?为什么要先执行最后一个console.log?最重要的是,我从AJAX调用获取数据的方法正确吗?我还能做些什么来获取数据?谢谢。AJAX调用是异步的,这意味着调用完成后,代码将继续执行下一步,直到调用完成
因此,当AJAX调用完成时,console.log(newdata2)代码>已到达,我猜newdata2
未定义
在som时间之后(即使时间很短),调用将得到响应并调用回调函数。AJAX调用是异步的,这意味着调用完成后,代码将继续执行下一步,直到调用完成
因此,当AJAX调用完成时,console.log(newdata2)代码>已到达,我猜newdata2
未定义
在som时间之后(即使时间很短),调用将得到响应,并调用回调函数。此语句:
console.log(newdata2);
是在ajax调用之外,它是在之后。这意味着它会在调用开始后立即执行,但不会在调用结束后执行。此语句:
console.log(newdata2);
是在ajax调用之外,它是在之后。这意味着它会在调用开始后立即执行,但不会在调用结束后执行。这是由于javascript的异步特性造成的。由于ajax调用是异步的,console.log(newdata2)代码>首先执行(如上面回答中清除所述)。ajax调用(异步)成功后,将调用回调函数 这是由于javascript的异步特性造成的。由于ajax调用是异步的,console.log(newdata2)代码>首先执行(如上面回答中清除所述)。ajax调用(异步)成功后,将调用回调函数
为请求设置普通url李>
设置响应数据类型
为请求设置普通url李>
设置响应数据类型
现有的JavaScript是非阻塞的。当代码由事件循环运行时,它将根据需要注销。一旦Ajax请求完成,data2
将获得它的新值。。。但是到那时,您已经运行了最外层的console.log(data2)
,
看看上面的内容,整个过程是使用一个工具可视化的,希望能让事情变得更清楚一些。(打开dev控制台,然后单击run并查看神奇之处)
正如@MarcosPrez提到的,您还有一个语法错误dataType
应该是json
,除非您真的想将文本值JASON
提交给您正在调用的任何API
需要明确的是,您希望在应用程序中下一步运行的代码(调用完成后)应该在回调中,而不仅仅是在Ajax调用旁边。现有的JavaScript是非阻塞的。当代码由事件循环运行时,它将根据需要注销。一旦Ajax请求完成,data2
将获得它的新值。。。但是到那时,您已经运行了最外层的console.log(data2)
,
看看上面的内容,整个过程是使用一个工具可视化的,希望能让事情变得更清楚一些。(打开dev控制台,然后单击run并查看神奇之处)
正如@MarcosPrez提到的,您还有一个语法错误dataType
应该是json
,除非您真的想将文本值JASON
提交给您正在调用的任何API
要明确的是,您希望在应用程序中运行的下一个代码(调用完成后)应该在回调中,而不仅仅是在Ajax调用旁边。您的第一个控制台是console.log(newdata2)代码>后面的2将为您提供正确的values@VinodLouis这就是我不能理解的。。。为什么是第一个?这应该是最后一个了。可能是@JackyShek的副本。你能举个例子吗?谢谢。什么是数据:“JASON”
??这似乎是您的第一个控制台的全部问题是console.log(newdata2)代码>后面的2将为您提供正确的values@VinodLouis这就是我不能理解的。。。为什么是第一个?这应该是最后一个了。可能是@JackyShek的副本。你能举个例子吗?谢谢。什么是数据:“JASON”
??这似乎就是全部问题谢谢你的回答,你能告诉我在这种情况下该怎么办吗?你需要数据,然后你就得到了数据。那么问题是什么呢?你想要什么行为?我想要console.log(newdata2)代码>不返回未定义,当我调用它时,它应该被定义。@starr检查duplicate@starrr但是您没有在任何地方定义newdata2
,因此您希望如何定义它?谢谢您的回答,您能告诉我在这种情况下该怎么做吗?您需要数据,然后您就可以得到数据。那么问题是什么呢?你想要什么行为?我想要console.log(newdata2)代码>不返回未定义,当我调用它时,它应该被定义。@starr检查duplicate@starrr但是你没有在任何地方定义newdata2
,所以你怎么能期望它被定义呢?我照你说的做了,没有任何改变。阅读答案)你不需要data2=JSON.parse(data);-您可以设置数据类型,也不向函数发送ajax回调响应。我已经尝试了我的答案,它的工作我做了你说的,没有改变。阅读答案)你不需要data2=JSON.parse(数据);
var data2; // no value gets assigned thus is undefined
$(function () {
function callback(data) {
console.log(data); // I get logged second
data2 = JSON.parse(data);
console.log(data2); // I get logged last (now with a value, as I'm the success callback)
}
var frm = $("myForm");
frm.submit(function (event) {
$.ajax({
type: 'post', // post: meaning we're submitting/sending something
url: "/...",
dataType: "json", // not JASON but json, (Java Script Object Notation)
data: frm.serialize(), // get data from the form
success: callback
});
event.preventDefault(); // stop actual form submission.
});
console.log(data2); // I get logged first (no value yet)
});