我创建了一个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
)?
答案 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);
})
});