提问人: 提问时间:7/27/2021 最后编辑:Martijn Pieters 更新时间:9/5/2021 访问量:227
我在这个ajax计时器上遇到了问题,它没有做我期望的事情,也没有执行
I am having trouble with this ajax timer it is not doing what I expect and does not execute
问:
我又回到了这个不执行我在 php 头的以下 https://deniserose.000webhostapp.com/fetch_sql.php
<head>
<title>Audio Stream</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
我在 java 脚本中,我在 php 文件的末尾加载了它
<script src = 'js/fetch_updater.js'></script>
现在这似乎永远不会运行
// Start Clock refresh
// uses new new Ajax.PeriodicalUpdater(
// in main fetch file to trigger the auto update of the page.
// Written by Denise Rose
var gUpdateDiv="";
var gContentURL="";
var gcheckInterval=0;
var gcheckURL = "";
var gCurrentCheck ="";
_fetchUpdater('track_data','/fetch_sql.php','/fetch_sql.php',6000);
function _fetchUpdater(updateDiv,contentURL,checkURL,checkInterval)
{
gUpdateDiv = updateDiv;
gContentURL = contentURL;
gcheckInterval = checkInterval;
gCheckURL = checkURL;
setTimeout('Check();',gcheckInterval);
}
//Called by _fetchUpdater every (n) seconds determines if content should be updated as page loaded.
function Check()
{
new Ajax.Request(gCheckURL,{method:'get', onSuccess:CheckResponse});
setTimeout('Check();',gcheckInterval);
}
// looks for the response and determines if the div should be updated.
var openFile = function(event) {
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var text = reader.result;
var node = document.getElementById('output');
node.innerText = text;
console.log(reader.result.substring(0, 200));
};
reader.readAsText(input.files[0]);
};
function CheckResponse(transport)
{
var content = transport.response.Text;
var base64file1 = openFile('/images/nowplaying-artwork_2.png');
var base64file2 = $('outerimg').$('#np_track_artwork').src.value;
if(base64file1 != base64file2) {
//if(gCurrentCheck != content) {
gCurrentCheck = content;
new Ajax.Request(gContentUrl, {method: 'get',onSuccess:function t() {
$(gUpdateDiv).innerHTML = t.responseText; /*t.response.json()*/}
});
$time = new Date().getTime();
new Ajax.Request('outer_img', {method: 'get',onSuccess:function s() {
$('outer_img').innerHTML = "<img id='#np_track_artwork' src='/images/nowplaying_artwork_2.png?t='"+$time+" alt='Playing track artwork' width='200' height='200'>"}
});
}
//setTimeout('Check();',gcheckInterval);
}
它应该在网站上查看图像/nowplaying_artwork_2.png,并检查它是否与使用 JavaScript 和 ajax 调用的屏幕上的图像相符。我知道目录中的那个正在更改,但据我所知,除非您刷新整个页面,否则它永远不会被激活。使用 crtl +shift I。一定是我做错了什么?但我无法弄清楚为什么它不执行。这是像目录位置一样愚蠢的东西吗?
我在 MIT Prototype JavaScript 框架 1.7.2 版中收到此错误
- (c) 2005-2010 山姆·斯蒂芬森
这是[违规]“setTimeout”处理程序需要 296299ms 原型.js
function delay(timeout) {
var __method = this, args = slice.call(arguments, 1);
timeout = timeout * 1000;
return window.setTimeout(function() {
return __method.apply(__method, args);
}, timeout);
}
我查看了代码检查。它确实运行 CheckResponse(),它需要与 SetTimeout() 不同,它是非推断的,任何人都可以提供帮助,因为它没有进一步发展,它可能是我的 base64 的东西,但需要帮助?我的读取 javacode 可能不起作用吗?
记者说这可能是使用了 SetTimeout(),但 SetTimout() 在清除后会被调用以更新计时器,所以这不可能是问题所在,而且仍然不知道为什么它不起作用。
我今天有更多的时间,所以用 Ctrl = Shift+I 进行了检查
我可以看到检查响应触发 https://i.gyazo.com/f4f0a3ea8a9fcddd864b420ddadddb21.png 正常。因此,它一定没有正确阅读图像,我使用了这个网站上的图像,我并不感到惊讶它没有工作,我确实发布了一个帖子,但没有人回答它并提供工作结果 从 DIV 中的网页 <img> 和 JavaScript 中的文件获取 base64_decode($artwork) 并进行比较
我已经尝试了几个版本,所有版本都不起作用,因为我所做的PHP版本是我正在寻找的是:
function OpenFileOrig() {
$r = fopen('images/nowplaying_artwork_2.png', 'wb');
if ($r !== false) {
fread($r,base64);
if (base64) base64 = base64_encode(base64);
} else fclose($r);
}
我也试过了
var openFile = function(file) {
var input = file.target;
var reader = new FileReader();
reader.readAsArrayBuffer(file);
};
const getBlobFromUrl = (myImageUrl) => {
return new Promise((resolve, reject) => {
let request = new XMLHttpRequest();
request.open('GET', myImageUrl, true);
request.responseType = 'blob';
request.onload = () => {
resolve(request.response);
};
request.onerror = reject;
request.send();
});
};
const getDataFromBlob = (myBlob) => {
return new Promise((resolve, reject) => {
let reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = reject;
reader.readAsDataURL(myBlob);
});
}
const convertUrlToImageData = async (myImageUrl) => {
try {
let myBlob = await getBlobFromUrl(myImageUrl);
console.log(myBlob);
let myImageData = await getDataFromBlob(myBlob);
console.log(myImageData);
return myImageData;
} catch (err) {
console.log(err);
return null;
}
};
两者似乎都不起作用 这将在 JavaScript 中运行 此外,它可以显示它在这里走了多远 https://i.gyazo.com/77c16c54f9cb91e1f1ef8be0d4fc7589.png 为什么 Stack Overflow 上的这些读取例程不起作用作为答案?
另外,您可以在此处看到调试器只会在一个地方停止 https://i.gyazo.com/ade6187a03d5faa53a8c0237680086b4.png 即使我通过右键单击断点使用“继续到此处”,它也不会转到下一个断点,这是计时器在执行代码之前跳出的问题吗?
我还通过打开的图像运行了它,jpg显示了它似乎没有获取url的位置,调试器标记在下面的intalic中,如图 https://i.gyazo.com/3e1e74503d4e3676b67606eff0012570.png 所示
var openFile = function(file) { *file = "/images/nowplaying_artwork_2"*
和
var input = file.target; *input = undefined*
和
var reader = new FileReader(); *reader = FileReader{readystate:0, result:null, error: null,onloadstart=null,onprogress:null...}*
我将打开的文件更改为此文件,因为它更具可读性并在文件中获取了 url
function openFile(file) {
var input = file; // file.target removed as not passing url
var reader = new FileReader();
reader.readAsArrayBuffer(file);
};
它仍然没有读取文件,给出异常
好的,所以一直在寻找
它在 [prototype.js][1] 中的捕获 (e) 'this.dispatchException(e);' 下给出了异常:
respondToReadyState: function(readyState) {
var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
if (state == 'Complete') {
try {
this._complete = true;
(this.options['on' + response.status]
|| this.options['on' + (this.success() ? 'Success' : 'Failure')]
|| Prototype.emptyFunction)(response, response.headerJSON);
} catch (e) {
this.dispatchException(e);
}
当我运行时$r = fopen('/images/nowplaying_artwork_2.png', 'wb');
尝试
function openFileOrig() {
var base64;
var r;
try {
r = fopen('/images/nowplaying_artwork_2.png', 'wb');
if (r !== false) {
fread(r,base64);
if (base64) base64 = base64_encode(base64);
}
} catch (err) {
if(r) fclose($r);
console.log(err);
return null;
}
}
所以我现在在运行 Perfomance 工具时收到一条消息,即 openfil 未在 openFileOrig 中定义,这要好得多,因为它提供了更好的提示,但奇怪的 https://www.careerride.com/JScript-read-and-write-file.aspx 但这里有一个更好的答案,谷歌列表中的 Stack Overflow 条目没有显示此 https://www.codeproject.com/Questions/399116/Javascript-read-data-froma-txt-file
因此,由于在我的书 JavaScript 1.1 中,JavaScript 中可用的原始文件命令现在都不可用,因此我回到了原始的函数读取器
function openFileOrig2(file) {
var base64;
var r;
var img_src;
try {
const reader = new FileReader();
reader.addEventListener('load', (event) => {
img_src = event.target.result;
// We do something
if (img_src) base64 = base64_encode(img_src);
});
reader.addEventListener('progress', (event) => {
if (event.loaded && event.total) {
const percent = (event.loaded / event.total) * 100;
console.log(`Progress: ${Math.round(percent)}`);
}});
reader.readAsDataURL(file);
} catch (err) {
console.log(err);
return null;
}
}
让我们看看它按预期做了什么,它给出了一个 blob 错误
我接下来试过了
var openFile = function(event) {
var input = event.target;
try {
var reader = new FileReader();
reader.onload = function(){
var img_src = reader.result;
// We do something
if (img_src) base64 = base64_encode(img_src);
};
reader.readAsDataUrl(input.target);
} catch (err) {
console.log(err);
return null;
}
};
但是根据控制台中记录的错误,reader.readAsDataUrl 不再是函数,这是不正确的信息。
“javascripture.com/FileReader”和误导性 我已经编写并报告了此错误并键入错误:reader.readASDataUrl javascripture.com 这不是 Chrome 浏览器中的函数。
现在它说输入一不是斑点?那这是什么:
var FILE = new Blob();
FILE.target = '/images/nowplaying_artwork_2.png';
FILE.files = FILE.target;
var base64file1 = openFile(FILE);
我从另一个关于Stack Overflow问题和答案的示例中再次尝试27251953但将其包装在错误检查器中。这也失败了“ReferenceError: blob is not defined”
如果 Stack Overflow 不再起作用,为什么所有这些东西都在 Stack Overflow 上?
try {
var file = new File([blob], "/images/nowplaying_artwork_2.png",{type:"image/png", lastModified:new Date().getTime()})
} catch (err) {
console.log(err);
return null;
问题仍然存在,blob 无法解决好吧,它在 StackOverflow 片段运行器上有效,我可以问为什么它在 000WebHostApp 上不起作用,版主再次说,在这里问。这是因为它需要节点.js吗?还是别的什么?
**更新** 我在这里解决了图像更新的问题 从 DIV 中的网页 <img> 和 JavaScript 中的文件获取 base64_decode($artwork) 并进行比较。但是,我们留下了不刷新的文本。它看到我可以做到这一点的唯一方法是在另一个文件中创建表create_sql_div.php该文件仅创建了表。它看到我必须找到一种方法来更新innerHTML。我不确定如何从 javascript 将其放入主页,但当我有时间查看它时会再次发布。但是,我确实试探性地尝试了document.querySelector('#np_track_text').innerHTML='/create_sql_div.php';但我不认为它会将 URL 加载到可以填充 div 的表单中?
我试过了
function updateTextDisplay() {
// document.querySelector('#np_track_text').load('/create_sql_div.php');
// document.getElementById('#np_track_text').redraw;
var client = new XMLHttpRequest();
client.open('GET','/create_sql_div.php');
client.onreadystatechange = function() {
document.querySelector('#np_track_text').innerHTML = client.responseText;
};
client.send;
}
嗯
我切换到这个 Ajax 调用,因为他们以前工作过,但仍然没有错误,也没有 html 更改
function updateTextDisplay() {
// document.querySelector('#np_track_text').load('/create_sql_div.php');
//
new Ajax.Request('/create_sql_div.php', {method: 'get',onSuccess:function t() {
document.querySelector('#np_track_text').innerHTML = t.responseXML;
document.querySelector('#np_track_text').redraw;
}
});
}
它给出错误“未捕获的语法错误:输入意外结束”有谁知道这意味着什么,因为谷歌是模糊的这个文件可以在浏览器中打开而不会出错,所以为什么会说这个错误?
复制错误的步骤显然,复制此错误的步骤很容易遵循:1)加载网站 deniserose.000webhostapp.com/fetch_sql.php 等待至少6000毫秒 2)您将看到底部部分变为“未定义”,获取源副本 3)刷新页面,它将返回,完成,获取源副本。4)使用 www.diffchecker.com 此声明“两个文件相同”来比较两个来源,在这种情况下,这里出了什么问题?
好的,我有答案
最后,对 t.responseText 的引用是错误的,这应该是 t.arguments[0].t.responseText ;也不是 t.responseXML 。哈哈,我在 Google 调试器变量中找到了它,所以一切都很好,我希望 D 拥抱
@enhzflep 我无法打开新问题,所以我正在添加这个问题,我在使用 SQL phpMyAdmin 时遇到错误
create function SPLITSTRING (@String AS VARCHAR(256)) RETURNS VARCHAR(256) AS (
SELECT `genre` LEFT(@String, CHARINDEX(';',@String +';'-1),STUFF(@String,1,CHARINDEX(';',@String + ';','') FROM`played_songs` UNION ALL
SELECT `genre` LEFT(@String, CHARINDEX(';',@String +';'-1),STUFF(@String,1,CHARINDEX(';',@String + ';','') FROM`played_songs` FROM SPLIT_STRING WHERE @String >''
)
SELECT `genre` FROM SPLIT_STRING ORDER BY `genre` ASC
它报告静态分析:
分析过程中发现 1 个错误。
无法识别的数据类型。(靠近位置 37 的“AS”)知道为什么?
答: 暂无答案
评论
onSuccess:'CheckResponse()'
应该可能是和注意和onSuccess:checkResponse
c
C
onSuccess:'CheckResponse()'
function checkResponse
onSuccess:checkResponse}
setTimeout()
setInterval()