Javascript 如何在客户端浏览器中读取服务器文件

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

团队, 我希望浏览器从服务器读取属性文件。因此,我遵循Jquery/AJaX,如下所示

<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