如何返回$ .ajax()函数的第二个数据变量?

时间:2017-01-10 12:10:26

标签: javascript jquery ajax

这是我的ajax功能。我如何console.log第一个数据变量?以下代码不起作用:

$('.comment_form').on('submit', function(e) {
    e.preventDefault();
    $.ajax({
        type: 'POST',
        data: {
            'text': $('.comment_text').serialize(),
            'csrfmiddlewaretoken': '{{ csrf_token }}',
            },
        success: function() {
            console.log(text) 
        }
    })
})

然而,当我这样做时:

$('.comment_form').on('submit', function(e) {
    e.preventDefault();
    $.ajax({
        type: 'POST',
        data:
            $('.comment_text').serialize(),
        success: function(data) {
            console.log(data)
        }
    })
})

它工作正常。知道为什么吗?

6 个答案:

答案 0 :(得分:1)

由于

success: function() {
    console.log(text) 
}

text在此上下文中不存在。

this.data.text会起作用,因为你在对象的方法中:

$.ajax({
    type: 'POST',
    data: {
        'text': $('.comment_text').serialize(),
        'csrfmiddlewaretoken': '{{ csrf_token }}',
        },
    success: function() {
        console.log(this.data.text);
        // everything from the object is accessible with this here (i.e. type and data fields)
    }
})

答案 1 :(得分:1)

尝试获取要发送到外部变量的数据,这样您就可以在ajax成功回调函数中访问其属性。

$('.comment_form').on('submit', function(e) {
    var _data = {
        'text': $('.comment_text').serialize(),
        'csrfmiddlewaretoken': '{{ csrf_token }}'
    };
    e.preventDefault();
    $.ajax({
        type: 'POST',
        data: _data,
        success: function() {
            console.log(_data.text) 
        }
    })
})

答案 2 :(得分:0)

console.log($('.comment_text').val())

答案 3 :(得分:0)

您的第二个示例正在运行,因为它记录了成功回调函数的参数data,即来自服务器的响应。

$('.comment_form').on('submit', function(e) {
e.preventDefault();
var dataToSend = {
        text: $('.comment_text').serialize(),
        csrfmiddlewaretoken: '{{ csrf_token }}',
        };
    $.ajax({
        type: 'POST',
        data: dataToSend,
        success: function() {
            console.log(dataToSend.text) 
        }
    })
})

答案 4 :(得分:0)

案例1: 如果您只想访问在ajax数据中发送的相同文本,则必须先将其初始化。因为到目前为止文本不是任何变量所以它将给出undefined。你可以这样做:

$('.comment_form').on('submit', function(e) {
var requestData = {
    'text': $('.comment_text').serialize(),
    'csrfmiddlewaretoken': '{{ csrf_token }}'
};
e.preventDefault();
$.ajax({
    type: 'POST',
    data: requestData ,
    success: function() {
        console.log(requestData.text) 
    }
})

})

案例2:如果您尝试从ajax响应中访问文本,则必须在success函数中传递相同的参数。

$('.comment_form').on('submit', function(e) {
e.preventDefault();
$.ajax({
    type: 'POST',
    data: {
        'text': $('.comment_text').serialize(),
        'csrfmiddlewaretoken': '{{ csrf_token }}',
        },
    success: function(text) {
        console.log(text) 
    }
})

})

答案 5 :(得分:0)

好吧,如果您想要序列化并希望在此过程中发送一些数据。

以下是我的工作:

import akka.pattern.ask

object Main extends App{

  val actorSystem = ActorSystem("actor-system")

  implicit val implicitActorSystem = actorSystem
  implicit val materializer = ActorMaterializer()

  // actually create the actor
  val testActor = actorSystem.actorOf(TestActor.props, "test-actor")

  val route1: Route =
    get {
      path("hello") {
        // get actor's reference using selection
        val testActorSelection = actorSystem.actorSelection("/user/test-actor")
        // now send using selection
        val responseFuture = testActorSelection ? "hello"

        // or send using the "val testActor" reference which we already have
        val responseFuture = testActor ? "hello"

        onComplete(responseFuture) {
          case Success(message) => complete(message)
          case Failure(ex) => complete(ex.message)
        }
      }
    }

  Http().bindAndHandle(route1, "localhost", 8185)
}

然后在AJAX数据中:

var myForm = document.getElementById('myForm');
formData = new FormData(myForm);
formData.append('custom_key', 'CUSTOM VALUE');
...

现在,在后端代码中,您可以找到表单字段以及自定义键值。

希望这有帮助。