我有以下功能,它运行得很好,我使用JSONP来克服跨域,写了一个http模块来改变内容类型,并没有在url中追加一个回调名称。
function AddSecurityCode(securityCode, token) {
var res=0;
$.ajax({ url: "http://localhost:4000/External.asmx/AddSecurityCode",
data: { securityCode: JSON.stringify(securityCode),
token: JSON.stringify(token)
},
dataType: "jsonp",
success: function(json) {
alert(json); //Alerts the result correctly
res = json;
},
error: function() {
alert("Hit error fn!");
}
});
return res; //this is return before the success function? not sure.
}
res变量是alwayes未定义。而且我不能在jsonp中使用async = false。 那么如何才能将结果返回到函数外部? 我肯定需要为次要的电话做这件事。
请指教,谢谢。 问题是我无法在此函数之外返回结果值
答案 0 :(得分:6)
你必须重写你的代码流,以便AddSecurityCode
获取一个callback
参数(即一个运行的函数),然后在你的成功回调中调用:
function AddSecurityCode(securityCode, token, callback) {
$.ajax({
....
success: function(json) {
alert(json); //Alerts the result correctly
callback(json); // HERE BE THE CHANGE
}
....
});
}
答案 1 :(得分:0)
你在函数内部声明了res,使其作为该函数的局部范围。所以有一个开始。在函数外部声明res,看看会发生什么。
答案 2 :(得分:0)
将async:false添加到ajax请求对象
$.ajax({
...
async: false,
...
});
return res;
但不建议这样做,因为它会阻止浏览器,并且在ajax调用完成之前会被视为无响应。异步进程应该使用回调函数,如提及的其他答案