我在使用ajax时遇到一些问题。
如何将ajax的所有结果赋值给外部变量?
我在谷歌上找到了这段代码..
var return_first = (function () {
var tmp = null;
$.ajax({
'async': false,
'type': "POST",
'global': false,
'dataType': 'html',
'url': "ajax.php?first",
'data': { 'request': "", 'target': arrange_url, 'method': method_target },
'success': function (data) {
tmp = data;
}
});
return tmp;
});
但不是为我工作..
有人能说出这段代码出了什么问题吗?
发布于 2013-05-29 12:11:56
您在以下位置缺少逗号
'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }
此外,如果您希望return_first
保存匿名函数的结果,则需要进行函数调用:
var return_first = function () {
var tmp = null;
$.ajax({
'async': false,
'type': "POST",
'global': false,
'dataType': 'html',
'url': "ajax.php?first",
'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
'success': function (data) {
tmp = data;
}
});
return tmp;
}();
注意末尾的()
。
发布于 2019-05-07 04:41:02
'async': false
说它已经折旧了。我确实注意到如果我在ajax成功时运行console.log('test1');
,然后在ajax函数之后用普通的js运行console.log('test2');
,test2
在test1
之前打印,所以问题是ajax调用有一个小的延迟,但不会停止函数的其余部分以获得结果。变量simply还没有被设置,所以你需要延迟下一个函数。
function runPHP(){
var input = document.getElementById("input1");
var result = 'failed to run php';
$.ajax({ url: '/test.php',
type: 'POST',
data: {action: 'test'},
success: function(data) {
result = data;
}
});
setTimeout(function(){
console.log(result);
}, 1000);
}
在test.php上(以防你需要测试这个函数)
function test(){
print 'ran php';
}
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = htmlentities($_POST['action']);
switch($action) {
case 'test' : test();break;
}
}
发布于 2020-05-07 03:40:05
因此,这是在最初的问题之后很长一段时间,从技术上讲,它并不是对如何使用Ajax调用填充问题所问的外部变量的直接回答。然而,在研究和响应中发现,如果不禁用调用中的异步函数,或者陷入看起来像是回调地狱的可能性,就很难做到这一点。我的解决方案是使用Axios。使用它极大地简化了我使用异步调用获取数据的方法。
例如,如果我试图通过来自JS的调用访问PHP中的会话变量,比如用户ID,这可能会出现问题。做这样的事情..
async function getSession() {
'use strict';
const getSession = await axios("http:" + url + "auth/" + "getSession");
log(getSession.data);//test
return getSession.data;
}
它调用如下所示的PHP函数。
public function getSession() {
$session = new SessionController();
$session->Session();
$sessionObj = new \stdClass();
$sessionObj->user_id = $_SESSION["user_id"];
echo json_encode($sessionObj);
}
要使用Axios调用此函数,请执行以下操作。
getSession().then(function (res) {
log(res);//test
anyVariable = res;
anyFunction(res);//set any variable or populate another function waiting for the data
});
结果将是,在本例中是一个来自PHP的Json对象。
{"user_id":"1111111-1111-1111-1111-111111111111"}
您可以直接在Axios调用的response部分的函数中使用它,也可以设置一个变量或调用另一个函数。
Axios调用的正确语法实际上如下所示。
getSession().then(function (res) {
log(res);//test
anyVariable = res;
anyFunction(res);//set any variable or populate another function waiting for the data
}).catch(function (error) {
console.log(error);
});
用于正确的错误处理。
我希望这对任何有这些问题的人都有帮助。是的,我知道这在技术上并不是对这个问题的直接回答,但考虑到已经提供的答案,我觉得有必要提供这个替代解决方案,大大简化我在客户端和服务器端的代码。
https://stackoverflow.com/questions/16805306
复制相似问题