Javascript 如何在客户端浏览器中读取服务器文件
团队, 我希望浏览器从服务器读取属性文件。因此,我遵循Jquery/AJaX,如下所示Javascript 如何在客户端浏览器中读取服务器文件,javascript,jquery,ajax,Javascript,Jquery,Ajax,团队, 我希望浏览器从服务器读取属性文件。因此,我遵循Jquery/AJaX,如下所示 <script> var properties = null; $(document).ready(function(){ $.ajax({url:"demo_test.txt",success:function(result){ properties = result; //properties = $('#result').val() //jQuery.glob
<script>
var properties = null;
$(document).ready(function(){
$.ajax({url:"demo_test.txt",success:function(result){
properties = result;
//properties = $('#result').val()
//jQuery.globalEval("var newVar = result;")
document.write("inside " + properties);
}});
});
document.write("outside " + properties );
</script>
如果服务器端有XML文件,下面是解析的方法:
<?xml version="1.0"?>
<server>
<name>velu</name>
</server>
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(property,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.loadXML(property);
}
alert(xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue);
用于访问文件的Javascript样式(异步)
您正在使用两种Javascript功能,它们以所谓的异步方式运行:onready和AJAX。这意味着您设置了它们,安装后的其余代码将继续运行,直到满足触发事件的必要条件。单个请求可能需要相当长的时间才能完成,在发出返回之前,可以运行数千行或更多的代码 下面是您的脚本中发生的事情: 第一行被调用并完成
var properties = null;
接下来,告诉文档在准备好并完全加载后执行一些代码:
$(document).ready(function(){...});
您的文档还没有准备好(我们仍然处于立即运行代码的状态),因此执行下一行
document.write("outside " + properties );
properties
仍然为空(尚未调用.ready()
函数中的代码)
稍后,文档准备就绪并调用提供的函数
function(){
$.ajax({url:"demo_test.txt",success:function(result){
properties = result;
document.write("inside " + properties);
}});
在这个函数中,您设置了一个AJAX请求,该请求在完成时运行一个函数
$.ajax({url:"demo_test.txt",success:function(result){...}});
此请求也是异步的,因此在处理此请求并从服务器返回时,您的其余代码将被删除。但是,在此之后,您的程序没有其他功能行,因此,稍后,该函数将成为下一个调用的对象
properties = result;
document.write("inside " + properties);
(为了便于阅读,我删除了注释)
properties
设置为result
,然后作为非空值打印出来。这也解释了为什么您可能会看到“外部”写入显示在第一位,而“内部”写入显示在第二位,即使它看起来“内部”应该在第一位
处理这种情况的最佳方法是在返回的AJAX请求中继续执行所有代码,或者让请求调用另一个继续执行代码的函数。这样,您就知道请求已经处理,可以安全地继续:
var properties = null;
$.ajax({
url : "demo_test.txt",
success : function(result)
{
properties = result;
document.write("inside " + properties);
runTheRestOfMyCode();
}
});
function runTheRestOfMyCode()
{
document.write("outside " + properties );
}
或者,您可以设置为false
。这将阻止代码前进到下一行,直到发出并返回请求,但它将在等待时暂停所有内容
var properties = null;
$.ajax({
url : "demo_test.txt",
async : false,
success : function(result)
{
properties = result;
document.write("inside " + properties);
runTheRestOfMyCode();
}
});
document.write("outside " + properties );
您正在使用两种Javascript功能,它们以所谓的异步方式运行:onready和AJAX。这意味着您设置了它们,安装后的其余代码将继续运行,直到满足触发事件的必要条件。单个请求可能需要相当长的时间才能完成,在发出返回之前,可以运行数千行或更多的代码 下面是您的脚本中发生的事情: 第一行被调用并完成
var properties = null;
接下来,告诉文档在准备好并完全加载后执行一些代码:
$(document).ready(function(){...});
您的文档还没有准备好(我们仍然处于立即运行代码的状态),因此执行下一行
document.write("outside " + properties );
properties
仍然为空(尚未调用.ready()
函数中的代码)
稍后,文档准备就绪并调用提供的函数
function(){
$.ajax({url:"demo_test.txt",success:function(result){
properties = result;
document.write("inside " + properties);
}});
在这个函数中,您设置了一个AJAX请求,该请求在完成时运行一个函数
$.ajax({url:"demo_test.txt",success:function(result){...}});
此请求也是异步的,因此在处理此请求并从服务器返回时,您的其余代码将被删除。但是,在此之后,您的程序没有其他功能行,因此,稍后,该函数将成为下一个调用的对象
properties = result;
document.write("inside " + properties);
(为了便于阅读,我删除了注释)
properties
设置为result
,然后作为非空值打印出来。这也解释了为什么您可能会看到“外部”写入显示在第一位,而“内部”写入显示在第二位,即使它看起来“内部”应该在第一位
处理这种情况的最佳方法是在返回的AJAX请求中继续执行所有代码,或者让请求调用另一个继续执行代码的函数。这样,您就知道请求已经处理,可以安全地继续:
var properties = null;
$.ajax({
url : "demo_test.txt",
success : function(result)
{
properties = result;
document.write("inside " + properties);
runTheRestOfMyCode();
}
});
function runTheRestOfMyCode()
{
document.write("outside " + properties );
}
或者,您可以设置为false
。这将阻止代码前进到下一行,直到发出并返回请求,但它将在等待时暂停所有内容
var properties = null;
$.ajax({
url : "demo_test.txt",
async : false,
success : function(result)
{
properties = result;
document.write("inside " + properties);
runTheRestOfMyCode();
}
});
document.write("outside " + properties );
老兄,AJAX是异步的,你期待什么?@谢谢。但这在这里有什么关系;这里的输出在构造中表现不同。1-3:Ajax是异步的,您不能(不应该)在成功回调之外访问来自请求的数据。4:我不明白。另外,不要使用document.write。使用document.write是有意义的,但这不是其中之一。因为document.write行是在AJAX返回信息之前执行的。Dude可能重复,AJAX是异步的,你期望什么?@谢谢。但这在这里有什么关系;这里的输出在构造中表现不同。1-3:Ajax是异步的,您不能(不应该)在成功回调之外访问来自请求的数据。4:我不明白。另外,不要使用document.write。使用document.write是有意义的,但这不是其中之一。因为document.write行在AJAX返回信息之前执行。此处可能重复一个问题。一旦我将async:false设置为false,那么我就可以运行restofmycode,执行将是正常的(顺序的)rit。。?无需在ajax rit中调用runTheRestOfMyCode(),正确。如果您通过将
async
设置为false
来发出同步请求,那么您不需要将代码i