Закройте все открытые обработчики скручивания перед перемещением вперед

У меня есть один кусок кода, который вызывает службу api через JQuery ajax Post. Ajax вызывает файл PHP, а файл PHP вызывает curl-код, который ссылается на API. Теперь я позвонил, предположим 5 одновременных вызовов, и эти вызовы занимают около 15 секунд каждый.

Теперь предположим, что один вызов возвратил ответ, и я не хочу ждать, пока остальные из них закончатся. Я хочу выполнить curl_close на всех из них и двигаться вперед, чтобы следующая страница не тратила время на закрытие всех этих завитушек. Как я могу это достичь.

Вот мои три файла:

Index.php

<?php session_start(); ?> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> </head> <body> <div><button onclick="startAjaxRequests();">Click To Start</button> </div> <div id="output_div"> Your output will be printed here:<br> </div> <div><button onclick="cancelXhrRequests();">Abort and Reload</button> </div> <script> var xhrRequests = []; function startAjaxRequests() { var data; var cities = ["cairo", "pune", "dubai", "london", "jodhpur"]; var lats = ["30.05", "18.52", "25.20", "51.50", "26.28"]; var longs = ["31.23", "73.85", "55.27", "0.12", "73.02"]; for(var i=0;i<cities.length;i++) { data = {latitude: lats[i], longitude: longs[i], section: "search_results"}; var xhr = $.ajax({ type: "POST", url: "location_penny.php", data: data, success: function (result) { //cancel.html(result); $("#output_div").append("Resutls for "+cities.toSource()+" are: "+result+"<br>"); }, async: true }); xhrRequests.push(xhr); } } function cancelXhrRequests(){ for (var i = 0; i < xhrRequests.length; i++) { xhrRequests[i].abort(); } var data = {section: "close_curls"}; $.ajax({ type: "POST", url: "location_penny.php", data: data, success: function (result) { alert(result); window.location.href = 'http://127.0.0.1:8080/test/fork_curl/redirected.php'; }, async: true }); } </script> </body> </html> 

Location_penny.php

 <?php error_reporting(E_ALL); ini_set('max_execution_time', 300); session_start(); $soapUrl = "my soap URL"; $api_username = "username"; $api_password = "password"; function apiAddittionalDetails($lat,$lang){ global $soapUrl, $api_username, $api_password; $xml_addittional_details = 'The XML Request'; $headers = array("Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "SOAPAction: http://tempuri.org/IDynamicDataService/ServiceRequest", "Pragma: no-cache", "Content-length: " . strlen($xml_addittional_details)); $url = $soapUrl; // PHP cURL for https connection with auth $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_TIMEOUT, 1000); curl_setopt($ch, CURLOPT_ENCODING , "gzip"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_addittional_details); // the SOAP request curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // converting array_push($_SESSION['curls'], $ch); $response = curl_exec($ch); return $response; curl_close($ch); } if($_POST['section']=="search_results"){ $response = apiAddittionalDetails($_POST['latitude'], $_POST['longitude']); $doc = simplexml_load_string($response); $add_nodes = $doc->xpath ('//Address'); echo count($add_nodes); }else if($_POST['section']=="close_curls"){ $count = 0; foreach($_SESSION['curls'] as $curl_object){ $count++; curl_close($curl_object); } echo $count; } ?> 

redirected.php

 <?php error_reporting(E_ALL); ini_set('max_execution_time', 300); session_start(); $soapUrl = "my soap URL"; $api_username = "username"; $api_password = "password"; function apiAddittionalDetails($lat,$lang){ global $soapUrl, $api_username, $api_password; $xml_addittional_details = 'The XML Request'; $headers = array("Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "SOAPAction: http://tempuri.org/IDynamicDataService/ServiceRequest", "Pragma: no-cache", "Content-length: " . strlen($xml_addittional_details)); $url = $soapUrl; // PHP cURL for https connection with auth $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_TIMEOUT, 1000); curl_setopt($ch, CURLOPT_ENCODING , "gzip"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_addittional_details); // the SOAP request curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // converting array_push($_SESSION['curls'], $ch); $response = curl_exec($ch); return $response; curl_close($ch); } echo(date("Ymd H:i:s",time())); echo "<br>"; $response = apiAddittionalDetails("30.05", "31.23"); echo(date("Ymd H:i:s",time())); echo "<br>"; $doc = simplexml_load_string($response); $add_nodes = $doc->xpath ('//Address'); echo count($add_nodes); ?> 

Если я нажму кнопку abourt и redirect на index.php, пока все еще выполняются запросы на завивание, я не вижу, чтобы страница двигалась вперед до 50-60 секунд, и это время, которое, как мне кажется, требуется для закрытия всех ручек curl.

После этого страница продвигается вперед. Я пробовал технику сеанса, но в коде говорится, что требуемый объект curl требуется, когда целое число передается в файле location_penny.php.