如何将ajax请求的响应分配给变量

时间:2019-01-15 15:27:22

标签: javascript jquery ajax

我创建了一个AJAX函数,该函数带有两个参数,将它们发送到PHP脚本中,并根据需要设置其格式,如下所示:

function createUniqueKey (arg1, arg2) {
  $.post("/ajax/documents.php", {arg_1: arg1, arg_2 : arg2}, function(data){
    console.log(data) //Good result
    return data
  }, "text");
}

当用户单击按钮时,它将启动ajax请求,问题是我无法将其分配给变量,我对此进行了测试,但未成功

$('#btn').click(function() {
  ...
  var uniqueKey = createUniqueKey(arg1, arg2)
  console.log(uniqueKey) //undefined
  ...
});

函数中出现的console.log给了我一个结果,但是变量console.log却给了我undefined

如何将结果签名到变量(uniqueKey)?

1 个答案:

答案 0 :(得分:0)

因为这是异步的,所以您有几个选择。基本的是使用回调:

 var request = require('request');
var cheerio = require('cheerio');
var URL = require('url-parse');

var pageToVisit = "http://www.arstechnica.com";
console.log("Visiting page " + pageToVisit);
request(pageToVisit, function (error, response, body) {
    if (error) {
        console.log("Error: " + error);
    }
    // Check status code (200 is HTTP OK)
    console.log("Status code: " + response.statusCode);
    if (response.statusCode === 200) {
        // Parse the document body
        var $ = cheerio.load(body);
        console.log($('body').text());
    }
});

另一个选择是弄清楚如何将其实现为Promise或使用异步功能:

function createUniqueKey (arg1, arg2, callback) {
  $.post("/ajax/documents.php", {arg_1: arg1, arg_2 : arg2}, function(data){
    console.log(data) //Good result
    callback(data);
  }, "text");
}

$('#btn').click(function() {
  createUniqueKey(arg1, arg2, function(uniqueKey){
      console.log(uniqueKey);
  })      
});

.click回调与此等效

function createUniqueKey (arg1, arg2) {
    return new Promise(function(resolve, reject) {
        $.post("/ajax/documents.php", {arg_1: arg1, arg_2 : arg2}, function(data){
            console.log(data) //Good result
            resolve(data);
          }, "text");
    })

}

$('#btn').click(function() {
  createUniqueKey(arg1, arg2).then(function(uniqueKey) {
    console.log(uniqueKey);
  })
});