我仍然是jQuery和ajax场景的新手,但我有一个$ .ajax请求执行GET来检索一些XML文件(大约6KB或更少),但是在用户花费在该页面上的持续时间内,XML内容应该是不会/不会改变(这个设计我无法改变,我也无权更改XML文件,因为我正在从其他地方读取它).因此,我有一个全局变量,我将响应数据存储到其中,并且对此数据的任何后续查找都在此变量上完成,因此不需要进行多个请求.
鉴于XML文件可以增加的事实,我不确定这是最佳实践,并且也来自java背景我对全局公共变量的想法通常是禁止的.
所以我的问题是,是否有更好的方法可以做到这一点,以及一个问题,如果文件扩展到一些荒谬的文件大小,这是否会导致任何内存问题?
我认为数据可以传递到xml对象中的一些getter/setter类型函数,这将解决我的全局公共变量问题,但仍然提出了我是否应该将响应存储在对象本身内的问题.
例如,我目前所做的是:
// top of code
var xml;
// get the file
$.ajax({
type: "GET",
url: "test.xml",
dataType: "xml",
success : function(data) {
xml = data;
}
});
// at a later stage do something with the 'xml' object
var foo = $(xml).find('something').attr('somethingElse');
Run Code Online (Sandbox Code Playgroud)
小智 68
这是一个很好地完成工作的功能.我无法得到上面的最佳答案.
jQuery.extend({
getValues: function(url) {
var result = null;
$.ajax({
url: url,
type: 'get',
dataType: 'xml',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
});
Run Code Online (Sandbox Code Playgroud)
然后要访问它,像这样创建变量:
var results = $.getValues("url string");
Run Code Online (Sandbox Code Playgroud)
小智 35
这对我有用:
var jqxhr = $.ajax({
type: 'POST',
url: "processMe.php",
data: queryParams,
dataType: 'html',
context: document.body,
global: false,
async:false,
success: function(data) {
return data;
}
}).responseText;
alert(jqxhr);
// or...
return jqxhr;
Run Code Online (Sandbox Code Playgroud)
重要的是要注意:global: false,async:false最后responseText链接到$.ajax请求.
Luk*_*fer 34
除了存储它之外没有办法解决它.内存分页应该减少那里的潜在问题.
我建议不要使用名为'xml'的全局变量,而是做更像这样的事情:
var dataStore = (function(){
var xml;
$.ajax({
type: "GET",
url: "test.xml",
dataType: "xml",
success : function(data) {
xml = data;
}
});
return {getXml : function()
{
if (xml) return xml;
// else show some error that it isn't loaded yet;
}};
})();
Run Code Online (Sandbox Code Playgroud)
然后访问它:
$(dataStore.getXml()).find('something').attr('somethingElse');
Run Code Online (Sandbox Code Playgroud)
Dom*_*Dom 17
你不必做任何这些.我的项目遇到了同样的问题.你要做的是在on success success回调中进行函数调用以重置全局变量.只要你将异步javascript设置为false,它就能正常工作.这是我的代码.希望能帮助到你.
var exists;
//function to call inside ajax callback
function set_exists(x){
exists = x;
}
$.ajax({
url: "check_entity_name.php",
type: "POST",
async: false, // set to false so order of operations is correct
data: {entity_name : entity},
success: function(data){
if(data == true){
set_exists(true);
}
else{
set_exists(false);
}
}
});
if(exists == true){
return true;
}
else{
return false;
}
Run Code Online (Sandbox Code Playgroud)
希望这对你有所帮助.
您可能会发现将响应值存储在DOM元素中更容易,因为它们可以全局访问:
<input type="hidden" id="your-hidden-control" value="replace-me" />
<script>
$.getJSON( '/uri/', function( data ) {
$('#your-hidden-control').val( data );
} );
</script>
Run Code Online (Sandbox Code Playgroud)
这样做的好处是不需要将async设置为false.显然,这是否合适取决于你想要实现的目标.
您的问题可能与任何本地或全局范围无关,只是服务器在执行"成功"函数与尝试从变量中取出数据的时间之间出现延迟.
你有可能在ajax"success"函数触发之前尝试打印变量的内容.
function getJson(url) {
return JSON.parse($.ajax({
type: 'GET',
url: url,
dataType: 'json',
global: false,
async: false,
success: function (data) {
return data;
}
}).responseText);
}
var myJsonObj = getJson('/api/current');
Run Code Online (Sandbox Code Playgroud)
这个工作!!!
| 归档时间: |
|
| 查看次数: |
178570 次 |
| 最近记录: |