В общем, не знаю как правильно описать. Хочу парсить JSON данные одного сайта. Если нужно спарсить 1 запрос, то CURL парсит отлично, возвращает результат и все отображается верно. Но если запросов хотя бы 2, то есть при клике на кнопку
"Старт" (условно) запускается таймер. Первый раз результата нет, то есть какая-то ошибка, не смог спарсить данные, а на второй раз парсит нормально и результат возвращается. Так же само, если запросов 2-...много. Пускай будет 2 - 10. ajax везде вернет ошибку, но только последний запрос вернется с результатом. Я думал, что может курл не успевает парсить как-то. Ставил таймеру интервал в 5 секунд и все равно, он на всех запросах возвращал пустой результат и только на последнем работал. Ну или если это 1 запрос, то результат тоже был.
Причем!!! с file_get_contents парсит все 10 запросов с результатом. Обращение к CURL и file_get_contents одинаковое.
Щас попробую чуть кода кинуть:
<button type="button" id="startPars">Парсить</button>
var timerId;
function PPars(){
$.ajax({url: '/ajax/query.php', type: 'POST', data: $("form#one").serialize(), dataType: "JSON",
error: function (){ $("#result").append( "<div>Внутренняя ошибка</div>" ); },
success: function ( a ) {
if ( a.s ) {
if ( a.log )
$("#result").append( a.log );
} else {
$("#result").append( a.log );
}
if ( a.tmr )
timerId = setTimeout( PPars, a.tmr );
}
});
}
не рабочая версия функции
$getRes = curl( "сайт какой-то" );
$getRes = json_decode($getRes, true);
// обрабатываем результат...
$data = array( "s" => $s, "log" => $log, "tmr" => $tmr );
echo json_encode($data);
function curl($url) {
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
рабочая версия функции
function curl($url) {
$ctx = stream_context_create(
array('http'=>
array(
'timeout' => 1200,
)
)
);
$response = file_get_contents( $url, false, $ctx );
return $response;
}
часть кода, конечно же не выложена, но думаю я всю основную информацию предоставил. Почему при одном запросе курл возвращает результат, а если стоит таймер на 2 и более повторений, то только при последнем запросе возвращается результат?