Javascript HTML不喜欢require()。。。。当我在index.js文件中使用
这个问题不同于: 我只是试着实现那个改变,但什么都没有 我发现,当我通过web浏览器运行json字符串结果时 未捕获引用错误:未定义require 我正在使用Node.js作为运行这个的平台 在调查了这件事之后,我仍然没有进一步的进展。我不想使用Browserfy或webpack。我没有使用Jquery 当我将我的两个json字符串硬编码到index.js中时,这会起作用。然而,我需要它是可变的 我需要一种纯JavaScript的方式来读取.json文件,而不需要使用require。 如我所见Javascript HTML不喜欢require()。。。。当我在index.js文件中使用,javascript,html,node.js,Javascript,Html,Node.js,这个问题不同于: 我只是试着实现那个改变,但什么都没有 我发现,当我通过web浏览器运行json字符串结果时 未捕获引用错误:未定义require 我正在使用Node.js作为运行这个的平台 在调查了这件事之后,我仍然没有进一步的进展。我不想使用Browserfy或webpack。我没有使用Jquery 当我将我的两个json字符串硬编码到index.js中时,这会起作用。然而,我需要它是可变的 我需要一种纯JavaScript的方式来读取.json文件,而不需要使用require。 如我所见
let fs = require('fs');
这将使我能够读取文件,但这是一个要求
我有我的HTML和Index.js文件在下面,如果你能提出任何建议
Webpage.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test Out Put to HTML Page</title>
</style>
</head>
<body>
<div id ='TestResults'>
<div id = 'TestOutput'>Nothing Yet</div>
</div>
<div id ='ErrorResults'>
<div id = 'ErrorOutPut'>Nothing Yet</div>
</div>
<script type = 'text/javascript' src = 'index.js'></script>
</body>
</html>
测试输出到HTML页面
还没有
还没有
Index.js
let myJsonString = require('../../ResultsArray/ResultsArray');
let myJsonStringError = require('../../ResultsArray/ErrorArray');
function result(results){
if(results === 'YesNo')
{
return 'Passed'
}
if(results === 'NoYes')
{
return 'Failed'
}
else
{
return 'Unknown'
}
}
function time (value){
// 1- Convert to seconds:
let seconds = (value / 1000).toFixed(2);
// 2- Extract hours:
let hours = parseInt( seconds / 3600 ); // 3,600 seconds in 1 hour
seconds = seconds % 3600; // seconds remaining after extracting hours
// 3- Extract minutes:
let minutes = parseInt( seconds / 60 ); // 60 seconds in 1 minute
// 4- Keep only seconds not extracted to minutes:
seconds = (seconds % 60).toFixed(2);
return ([hours+":"+minutes+":"+seconds]);
}
function testTemplateErrors (test){
return `
<tr>
<td class='TestGroup'>${test.Folder}</td>
<td class='TestName'>${test.Test_Name}</td>
<td class='TestsStatus'>${test.Running}</td>
<td class='TestRunTime'>${time(test.Run_Time)}</td>
<td class= 'TestResult'>${result(test.Passed + test.Failed)}</td>
</tr>
`
}
function testTemplateResults (test){
return `
<tr>
<td class='TestGroup'>${test.Folder}</td>
<td class='TestName'>${test.Test_Name}</td>
<td class='TestsStatus'>${test.Running}</td>
<td class='TestRunTime'>${time(test.Run_Time)}</td>
<td class= 'TestResult'>${result(test.Passed + test.Failed)}</td>
</tr>
`
}
if(myJsonString && myJsonString.length)
{
document.getElementById('TestResults').innerHTML = `
<h1 class='ContentTitle'> Regression Tests (${myJsonString.length} Tests Ran)</h1>
<table><tr>
<th>Result Folder Name</th>
<th>Result Test Name</th>
<th>Result Running</th>
<th>Result Run Time</th>
<th>Result Result</th>
</tr><tr>
${myJsonString.map(testTemplateResults).join('')}
</tr></table>
<p class='footer'> These ${myJsonString.length} Results were added recently. </p>
`
}
if(myJsonStringError && myJsonStringError.length)
{
document.getElementById('ErrorResults').innerHTML = `
<h1 class='ContentTitle'> Error Results (${myJsonStringError.length} Errors Occurred)</h1>
<table><tr>
<th>Error Folder Name</th>
<th>Error Test Name</th>
<th>Error Running</th>
<th>Error Run Time</th>
<th>Error Result</th>
</tr><tr>
${myJsonStringError.map(testTemplateErrors).join('')}
</tr></table>
<p class='footer'> These ${myJsonStringError.length} Results were added recently. </p>
`
}
让myJsonString=require('../../ResultsArray/ResultsArray');
让myJsonStringError=require('../../ResultsArray/ErrorArray');
功能结果(结果){
如果(结果=='YesNo')
{
返回“已通过”
}
如果(结果=='NoYes')
{
返回“失败”
}
其他的
{
返回“未知”
}
}
功能时间(值){
//1-转换为秒:
设秒=(值/1000).toFixed(2);
//2-提取时间:
设小时=parseInt(秒/3600);//1小时内3600秒
秒=秒%3600;//提取小时后剩余的秒数
//3-摘录分钟:
让分钟=parseInt(秒/60);//1分钟内60秒
//4-仅保留未提取到分钟的秒数:
秒=(秒%60).toFixed(2);
返回([hours+”:“+minutes+”:“+seconds]);
}
函数testTemplateErrors(测试){
返回`
${test.Folder}
${test.test\u Name}
${test.Running}
${time(test.Run\u time)}
${result(test.Passed+test.Failed)}
`
}
函数testTemplateResults(测试){
返回`
${test.Folder}
${test.test\u Name}
${test.Running}
${time(test.Run\u time)}
${result(test.Passed+test.Failed)}
`
}
if(myJsonString&&myJsonString.length)
{
document.getElementById('TestResults')。innerHTML=`
回归测试(${myJsonString.length}测试已运行)
结果文件夹名称
结果测试名称
结果运行
结果运行时间
结果
${myJsonString.map(testTemplateResults.join(“”)}
`
}
if(myJsonStringError&&myJsonStringError.length)
{
document.getElementById('ErrorResults')。innerHTML=`
错误结果(${myJsonStringError.length}发生错误)
错误文件夹名
错误测试名称
运行错误
错误运行时
误差结果
${myJsonStringError.map(testTemplateErrors).join(“”)}
`
}
require
由Node.js提供,而不是由浏览器提供,也由Webpack或Browserify等捆绑软件提供。如果您运行的是基于浏览器的代码,而没有使用这些工具或RequireJS中的任何一种,那么它将不存在于浏览器环境中
要从基于浏览器的代码中读取资源,可以使用ajax。实现这一点的现代方法是使用fetch
(以前,您会使用XMLHttpRequest
)。下面是一个简单的fetch
示例,用于返回JSON:
fetch("/url/to/the/resource")
.then(response => {
if (!response.ok) {
throw new Error("HTTP error: " + response.status);
}
return response.json();
})
.then(data => {
// ...use the data here, it's been parsed...
})
.catch(error => {
// Something went wrong, handle/report it
});
正如我所说,很容易忘记。好的
检查,一直重新编码很麻烦,所以我使用了一个助手:
const myFetch = (...args) => fetch(...args).then(response => {
if (!response.ok) {
throw new Error("HTTP error: " + response.status);
}
});
…您可以这样使用它来获取JSON:
myFetch("/url/to/the/resource")
.then(response => response.json())
.then(data => {
// ...use the data here, it's been parsed...
})
.catch(error => {
// Something went wrong, handle/report it
});
如果要获取多个资源并等待它们全部到达,请使用Promise.all
:
Promise.all([
myFetch("../../ResultsArray/ResultsArray.json").then(response => response.json()),
myFetch("../../ResultsArray/ErrorArray.json").then(response => response.json())
])
.then(([resultsArray, errorArray]) => {
// ...use `resultsArray` and `errorArray` here...
})
.catch(error => {
// Handle/report error
});
所有这些例子都假设ES2015-ES2017。如果您可以使用ES2018特性,那么taht代码可以使用更高的同步性
请注意,fetch
(如XMLHttpRequest
)是异步的;这些问题可能有助于解决您可能因此遇到的问题:
let myJsonString;
let myJsonStringError;
fetch("../../ResultsArray/ResultsArray.json")
.then(response => {
if (!response.ok) {
throw new Error("HTTP error: " + response.status);
}
return response.json();
})
.then(data => {
myJsonString = data;
console.log(myJsonString);
})
.catch(error => {
console.log('Results.json could not be found');
});
fetch("../../ResultsArray/ErrorArray.json")
.then(response => {
if (!response.ok) {
throw new Error("HTTP error: " + response.status);
}
return response.json();
})
.then(data => {
myJsonStringError = data;
console.log(myJsonStringError);
})
.catch(error => {
console.log('Error.json could not be found');
});
我可以在我的网络选项卡中看到.Json文件。
当我更改index.js文件以显示我得到的更改时,可能会重复“加载资源失败:服务器响应状态为404(未找到)”。即使它们在指定的位置。@Daniel-如果您得到的是404,则URL是错误的。我猜你错过了一个文件扩展名(
.json
或.js
),因为它们不在你的require
调用中(Node.js推断.js
,如果你不使用它,浏览器就不会)。好吧,我试过:获取(../../ResultsArray/ErrorArray.json”)。然后(response=>{if(!response.Ok){抛出新错误(“HTTP错误:+response.status);}返回response.json();})。然后(数据=>{myJsonString=data;})。捕获(错误=>{console.log('Error.json找不到');});
当我检查html页面时,我在网络选项卡中得到了.jsons,但是它没有链接到index.js文件中我的json字符串。@Daniel-我不知道你所说的“…它没有链接到index.js文件中我的json字符串…”是什么意思。json文件中的数据可以在我上面显示的位置访问(而不是全局)。如图所示,请参阅答案末尾的链接问题,以了解更多详细信息。我已添加了另一个解释,说明我的意思。