Не знаю, как это работает, но есть предположение. Возможно получение json файла напрямую происходит быстрее, чем получение json-файла через php обработчик.
Получаю json файл и отправляю его на рhp для записи, в итоге php не успевает выполнить скрипт и json снова вызывается со старыми данными, поэтому ничего не работает. Вообщем я сделала вызов и запись json через php. Теперь работает, а все остальные варианты нет:
function file_exists(url1)
{
var text = "";
$.get(url1)
.done(function() {
$('#flag').text("true");
}).fail(function() {
//text = "Файл не существует";
$('#flag').text("false");
});
}
function init()
{
Index1 = -1;
bool = true;
var timer = setTimeout(function ajaxQuery(){
var ajaxhttp = new XMLHttpRequest();
// var url = 'http://3json_example.su/data.json?v=${performance.now()}';
//file_exists(url);
ajaxhttp.open("POST","http://3json_example.su/ex.php", true);
ajaxhttp.onreadystatechange = function(){
if(ajaxhttp.readyState == 4 && ajaxhttp.status == 200){
//console.log(ajaxhttp.responseText);
jsontent = JSON.parse(ajaxhttp.responseText);
tree.innerHTML = "";
const html = recursiveList(jsontent);
tree.append(html);
output.innerHTML = "<strong>"+bool+"</strong> " + i +" == "+Index1;
posts = jsontent["response"];
if(bool)
{
switch(Index1) {
case -1: // if (x === 'value1')
posts[i].status = "current";
break;
default:
if(posts.length-1<i)
{
i = 0;
}
if(Index1 >= posts[i].photo.length)
{
posts[i].status = "ok";
i++;
Index1 = -2;
}
else
{
posts[i].photo[Index1].big.status = "ok";
}
if(posts[i]==undefined)
{
bool = false;
}
break;
}
console.log(posts);
jsontent["response"] = posts;
const jsonString = JSON.stringify(jsontent);
const xhr = new XMLHttpRequest();
xhr.open("POST",'receive.php');
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(jsonString);
Index1++;
}
}
}
ajaxhttp.send();
setTimeout(ajaxQuery,1000);
},1000);
//setInterval(test,1000);
}
Файл ex.php
<?php
$last_modified = filemtime( __FILE__ );
$modified_since = ( isset( $_SERVER["HTTP_IF_MODIFIED_SINCE"] ) ? strtotime( $_SERVER["HTTP_IF_MODIFIED_SINCE"] ) : false );
$etagHeader = ( isset( $_SERVER["HTTP_IF_NONE_MATCH"] ) ? trim( $_SERVER["HTTP_IF_NONE_MATCH"] ) : false );
$data = file_get_contents("data.json");
$etag = sprintf( '"%s-%s"', $last_modified, md5( $data ) );
header( "Last-Modified: ".gmdate( "D, d M Y H:i:s", $last_modified )." GMT" );
header("Content-Type: text/html; charset=utf-8");
header( "Etag: ".$etag );
if ( (int)$modified_since === (int)$last_modified && $etag === $etagHeader ) {
header( "HTTP/1.1 304 Not Modified" );
exit;
}
echo $data;
?>
P.S. Хотя я протестировала во всех браузерах, через некоторое время еще раз протестирую чтобы убедиться, что все работает.