我有两个js文件,即myJs1.js和myJs2.js。 从myJs1.js调用myJs2.js的方法。
我想将r1
和r2
返回到结果中(在myJs1.js中)
我试过这个:
我在ajax调用之前声明了r1
和r2
变量
在ajax电话之后我添加了:
return [r1,r2];
但它将r1
和r2
作为undefined
返回。
当我研究这个问题时,我发现添加async: false
可能有用,但它有很多问题(比如浏览器冻结)。即便如此我尝试了它仍然无法获得r1
和r2的值。
注意:我是第一次使用AJAX,所以记住这一点。
编辑:在Js1中有一个ajax调用,在成功事件中调用该方法。我想访问结果来调用js1
中的另一个方法编辑:在这里查看代码
myJS1:
function method()
{
$.ajax({
type: "GET",
dataType: "json",
url: "http://127.0.0.1:8000/***/***",
success: function(response){
result=methodOfmyJs2(response);
load1(r1); //r1 from result
load2(r2); //r2 from result
}
})
}
myJs2:
function methodOfmyJs2(data)
{
$.ajax({
type: "GET",
data:SomeData,
dataType: "json",
url: "http://127.0.0.1:8000/***/***",
success: function(response){
r1=anotherMethodFromThisJS1(response);
r2=anotherMethodFromThisJS2(response);
result=[r1,r2]
}
})
}
我需要访问r1和r2的值来调用myJs1的load1和load2方法。
答案 0 :(得分:2)
您可以改为使用回调。
[编辑]
myJS1:
function method () {
$.ajax({
type: "GET",
dataType: "json",
url: "http://127.0.0.1:8000/***/***",
success: function (response) {
methodOfmyJS2(function (r1, r2) {
load1(r1);
load2(r2);
});
}
});
}
myJS2:
methodOfmyJs2 (callback) {
$.ajax({
type: "GET",
data: somedata,
dataType: "json",
url: "http://127.0.0.1:8000/****/****",
success: function (response) {
var r1 = anotherMethodFromThisJS1(response);
var r2 = anotherMethodFromThisJS2(response);
callback(r1, r2);
});
}
答案 1 :(得分:2)
默认情况下,Ajax调用是asynchronous
,这意味着ajax调用函数jQuery.ajax()
不会等待HTTP响应在返回之前返回。
要在HTTP响应到达后获取数据,我们必须提供一个回调,即success
函数。如果你想在另一个函数中获取这个数据,只需在success
回调函数中调用该函数。
以下是代码:
//JS1.
function processResponse(r1, r2) {
// do processing here with r1 and r2
}
//JS2.
function methodOfmyJs2()
{
$.ajax({
type: "GET",
data:somedata,
dataType: "json",
url: "http://127.0.0.1:8000/****/****",
success: function(response){
r1=anotherMethodFromThisJS1(response);
r2=anotherMethodFromThisJS2(response);
//calling the success callback
processResponse(r1, r1);
}
});
}
如果您真的想要这样做,还有另一种选择,您可以像下面那样进行Ajax调用synchronous
。
$.ajax({
type: "GET",
url: remote_url,
async: false,//now call is synchronous
success : function (data) {
}
});
现在jQuery.ajax()
将等待HTTP响应到达,然后您可以从[r1, r2]
返回methodOfmyJs2()
。
但是你应该避免进行同步调用,因为它会让JS线程等待冻结UI。
答案 2 :(得分:0)
function getAjaxOutput() {
request1().then(function(data){
// get data from request 1 and pass to request 2
return request2(data);
})
.then(function(data){
// get data from request2
$('#output').text(JSON.stringify(data));
})
return false;
}
试试吧
https://jsfiddle.net/je7wf4ww/
如果你想从getAjaxOutput返回普通结果 - 你根本就不能(当然没有进行请求同步) - 你需要返回promise,这是一个围绕ajax调用的包装,并用{{1}再次链接它}}