Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery AJAX回调函数不使用';我不能按预期工作:_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jQuery 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) {

我试图从AJAX调用的成功部分获取数据。因此,我试图为此编写一个回调函数。我有以下代码:

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