未通过ajax调用设置Javascript全局变量
可能重复:未通过ajax调用设置Javascript全局变量,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,可能重复: 我正在开发一个CakePHP应用程序,该应用程序利用广泛的对控制器的AJAX调用。我被一个特定的AJAX调用卡住了,在这个调用中,我试图将控制器的响应分配给一个JS全局变量。代码如下: window.errors=”“; 函数设置错误(err){ window.errors=err; } 函数ajaxCall(u、t、d、dt){ var type=typeof t!=“未定义”?t:“post”; var dataType=typeof dt!=“未定义”?dt:“json”;
我正在开发一个CakePHP应用程序,该应用程序利用广泛的对控制器的AJAX调用。我被一个特定的AJAX调用卡住了,在这个调用中,我试图将控制器的响应分配给一个JS全局变量。代码如下:
window.errors=”“;
函数设置错误(err){
window.errors=err;
}
函数ajaxCall(u、t、d、dt){
var type=typeof t!=“未定义”?t:“post”;
var dataType=typeof dt!=“未定义”?dt:“json”;
var成功=false;
var err=“”;
$.ajax({url:url,data:'data=“+d,type:type,dataType:dataType,
成功:功能(d){
如果(d.hasOwnProperty('success')==false){//json响应
对于(vari in d){//从对象获取验证错误
用于(i中的变量j){
if(类型d[i][j]=“未定义”){
继续;
}
err+=d[i][j]+“
”;
}
}
console.log(err);//是的,您认为return
语句在成功回调之前运行是正确的。您不能从函数返回结果,因为函数必须在处理成功事件之前返回
将回调添加到ajaxCall
函数中,并调用该函数,而不是设置success变量:
function ajaxCall(u, t, d, dt, callback) {
var type = typeof t !== 'undefined' ? t : "post";
var dataType = typeof dt !== 'undefined' ? dt : "json";
$.ajax({url: url, data: "data=" + d, type: type, dataType: dataType,
success: function(d){
if(d.hasOwnProperty('success') === false) { //json response
for(var i in d) { //fetch validation errors from object
for(var j in i) {
if(typeof d[i][j] === "undefined") {
continue;
}
err += d[i][j] + "<br/>";
}
}
callback(false, err);
} else {
callback(d.success === "1", "");
}
}
});
}
感谢您的快速回复!是的,您的解决方案工作得非常好。我使用它的次数越多,就学到了很多新的JS内容(以及它的许多怪癖)。
ajaxCall('https://localhost/users/add', 'post', data, 'json', function(success, err){
if (success) {
alert("Registered!");
} else {
alert(err);
}
});