如何设置全局变量。
$(document).ready(function() {
$("a.action").click(function(event) {
var tempResponse = "";
$.get("", function(response){
tempResponse = response;
});
alert("response " + tempResponse );
}
//todo use response to manipulate some data
});
我宣布了全局变量tempResponse
。我设置了回调函数。
tempResponse = response;
但是当我尝试提醒响应时,没有显示任何数据。我也尝试这个解决方案。我改变了变量声明
变为$.tempResponse
并将设置的脚本更改为$.tempResponse = response;
但它无效。
为什么会发生这种情况?
答案 0 :(得分:3)
我相信将全局变量设置在脚本的顶部,然后将ajax调用设置为async:false将完全满足需要。
这样ajax在javascript尝试分配变量之前就完成了。 另外,ajax函数对我来说比使用.get。
更干净tempResponse = null;
$.ajax({
url: 'whatever.cgi',
async: false,
dataType: 'json',
data: { blank: null }
success: function(data) {
tempResponse = data.response;
}
}).error(function(){
alert('Ajax failed')
});
alert(tempResponse);
在返回“响应”的脚本中,请确保它采用json格式。在php中我会将数据转换为像
这样的数组$json_data = array('response'=>$var_name_php_for_response_value);
然后只回显所需的数据:
json_encode($json_data);
这将生成格式:{ "response":"some response text" }
,这是正确的json格式。
答案 1 :(得分:2)
因为您在实际设置变量之前调用警报。请记住,当您致电$.get
时,您正在执行异步查询。试试这个:
$(document).ready(function() {
$.get('/somescript.cgi', function(response){
alert('response ' + response);
});
});
答案 2 :(得分:0)
您只是在$ .get之后立即调用警报,因此tempResponse尚未准备就绪
答案 3 :(得分:0)
使其有效:
$(document).ready(function() {
var tempResponse = "";
$.get("", function(response){
tempResponse = response;
alert("response " + tempResponse );
});
});
注意你的警报现在在json回调函数内;在json查询完成之前,此函数不会执行
答案 4 :(得分:0)
我的建议是你必须等待ajax完成。
使用ajaxComplete()
如果你有:
var tempResponse = "";
$.get("ajax/test.html", function(response){
tempResponse = response;
});
你可以:
$('.log').ajaxComplete(function(e, xhr, settings) {
if (settings.url == 'ajax/test.html') {
alert("response " + tempResponse );
$(this).text('Triggered ajaxComplete handler.');
}
});