如何修复下面的脚本,以便它每次都能正常工作!有时它会起作用,有时则不起作用。 Pro JQuery 解释了导致这种情况的原因,但它没有讨论如何修复它。我几乎肯定它与ajax就绪状态有关,但我不知道如何写它。网络显示了大约99种不同的方式来编写ajax和JQuery,它有点压倒性。
我的目标是创建一个HTML shell,可以使用基于服务器的文本文件填充文本。例如:假设在名为AG的服务器上有一个文本文件,其内容为PF:PF-01,PF-02,PF-03等。我想提取此信息并填充HTML DOM之前用户看到。 A是@#!#$ *&用PHP的金色,然后发现我的主机已关闭fopen()。我在这里。
谢谢你的帮助。
JS - plantSeed.js
var pageExecute = {
fileContents:"Null",
pagePrefix:"Null",
slides:"Null",
init:function () {
$.ajax({
url: "./seeds/Ag.txt",
success: function (data){
pageExecute.fileContents = data;
}
});
}
};
HTML - HEAD
<script type="text/javascript">
pageExecute.init();
</script>
HTML - BODY
<script type="text/javascript"> alert(pageExecute.fileContents); </script>
答案 0 :(得分:12)
试试这个:
var pageExecute = {
fileContents:"Null",
pagePrefix:"Null",
slides:"Null",
init: function () {
$.ajax({
url: "./seeds/Ag.txt",
async: false,
success: function (data){
pageExecute.fileContents = data;
}
});
}
};
答案 1 :(得分:10)
试试这个:
<强> HTML:强>
<div id="target"></div>
<强> JavaScript的:强>
$(function(){
$( "#target" ).load( "pathToYourFile" );
});
在我的示例中,div将填充文件内容。看一下jQuery .load()
函数。
“pathToYourFile”可以是包含您要加载的数据的任何资源。有关如何使用它的更多信息,请查看加载方法文档。
$(function(){
$.get( "pathToYourFile", function( data ) {
var resourceContent = data; // can be a global variable too...
// process the content...
});
});
$(function(){
$.ajax({
url: "pathToYourFile",
async: false, // asynchronous request? (synchronous requests are discouraged...)
cache: false, // with this, you can force the browser to not make cache of the retrieved data
dataType: "text", // jQuery will infer this, but you can set explicitly
success: function( data, textStatus, jqXHR ) {
var resourceContent = data; // can be a global variable too...
// process the content...
}
});
});
重要的是要注意:
$(function(){
// code...
});
与:
相同$(document).ready(function(){
// code
});
通常您需要使用此语法,因为您希望DOM已准备好执行您的JavaScript代码。
答案 2 :(得分:1)
我建议不要使用url: "./seeds/Ag.txt",
直接定位文件。相反,使用服务器端脚本llike PHP 打开文件并以平面格式或JSON格式返回数据。
您可以在此处找到打开文件的教程:http://www.tizag.com/phpT/fileread.php
答案 3 :(得分:1)
这是你的问题: 你在主体中有一个脚本标记,它要求输入AJAX数据。 即使你要求它将数据写入你的shell,而不是只是喷出它...... ......那是你的第一个问题。
原因如下:
AJAX是异步的。 好的,我们已经知道了,但那是什么意思?
嗯,这意味着它将转到服务器并要求提供该文件。 服务器将继续查找,并将其发送回去。然后你的电脑将下载内容。当内容100%下载时,它们将可供使用。
......事情是......
您的计划不是在等待这种情况发生。 它告诉服务器要花时间,同时它会继续做它正在做的事情,并且它不会再考虑内容,直到它从服务器接到一个电话。
嗯,在呈现HTML方面,浏览器真的非常快。 服务器在提供静态(纯文本/ img / css / js)文件时也非常快速。
所以现在你正在参加比赛。 哪个会先发生? 服务器是否会回调文本,或者浏览器是否会点击要求提供文件内容的脚本标记?
无论哪一个人在刷新中胜出都会发生。
那你怎么解决这个问题呢? 回调。
回调是一种不同的思维方式。 在JavaScript中,您可以通过在下载完成时为AJAX调用提供一个函数来执行回调。
这就像是从工作线上打电话给某人,然后说:当你找到答案时,请拨打这个分机给我。
在jQuery中,您将在AJAX调用中使用名为“success”的参数。
使success : function (data) { doSomething(data); }
成为您传递给AJAX调用的对象的一部分。
当文件下载时,一旦下载,jQuery就会将结果传递给你给它的成功函数,它将完成它所做的任何事情,或者调用它所调用的任何函数。
试一试。它肯定胜过赛车,看看哪个先下载。