Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][AJAX][PHP]Proste - trudne / jak dokleić do URL i opóźnić część skryptu
Forum PHP.pl > Forum > Przedszkole
skleroza
Witam,
Dawno nie bawiłem się w pisanie skryptów i wiele wyleciało mi z głowy.
Dlatego też mam prośbę o pomoc
1. Jak dodać zapytanie do URL
2. Jak opóźnić część skryptu

Kawałek z HTML
  1. <script type="text/javascript" language="javascript" src="ajax.js"></script>
  2. <div align="center"><h2>*Sprawdź*</h2>
  3. <form action="java script:get(document.getElementById('acctform'));" name="acctform" id="acctform">
  4. <textarea rows="1" cols="1" style="width: 25%; height: 20px" id="search_id"></textarea>
  5. <p>
  6. <input type="submit" name="button" value="Sprawdź adres" onclick="return Tab_Click(this)">
  7. </form>
  8. <br>
  9. <div align="center" id="waiting"></div>
  10. </p>
  11. <br>
  12. <div align="center" id="showresults"></div>
  13. </div>


Do tego cały ajax.js

var http_request = false;
function makePOSTRequest(url, parameters) {
http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}

http_request.onreadystatechange = alertContents;
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}

function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
result = http_request.responseText;
document.getElementById('waiting').innerHTML = '';
document.getElementById('showresults').innerHTML = result;
} else {
alert('There was a problem with the request.');
}
}else{
document.getElementById('waiting').innerHTML = '<img src="loading.gif">';}
}

function get(obj) {
var poststr = "" + encodeURI( document.getElementById("search_id").value );
makePOSTRequest('getaddress.php', poststr);
}


No i tu zaczynają się problemy
getaddress.php
  1.  
  2. // to działa ok
  3. $url = "https://blockchain.info/address/1CoAgA2Bb9XDMsBv6cE1YNuU5Z1BormTTc";
  4.  
  5. // tu już nie chce zwracać odpowiedzi nawet jak dam
  6. //if (isset ($_POST['search_id'])) {
  7. //$url = "https://blockchain.info/address/{$_POST['search_id']}";
  8.  
  9. //dalej jest chyba ok bo zwraca dane
  10.  
  11. $ch = curl_init();
  12. curl_setopt($ch, CURLOPT_URL,$url);
  13. //curl_setopt($ch, CURLOPT_POST, 1);
  14. //curl_setopt($ch, CURLOPT_POSTFIELDS, '$_POST['search_id']');
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  16. curl_setopt($ch, CURLOPT_TIMEOUT, 25);
  17. $wejscie = curl_exec($ch);
  18. curl_close($ch);
  19.  
  20. preg_match('/<div class="col-md-5">(.+?)<\/div>/ism', $wejscie, $wyjscie);
  21. preg_match('/<div class="col-md-4" style="overflow:visible;">(.+?)<\/div>/ism', $wejscie, $wyjscie1);
  22.  
  23. echo($wyjscie[0]);
  24. echo($wyjscie1[0]);
  25.  
  26. // i tu moje drugie pytanie jak opóźnić tą część skryptu
  27. // w ten sposób opóźnia cały skrypt
  28. // wiem że można zrobić to w JS ale nie potrafię tego zrobić a wolał bym aby wszystko było w .php
  29.  
  30. flush();
  31. sleep(20);
  32.  
  33. $baza = "blebleble................";
  34.  
  35. echo($baza)
  36. ?>



Z góry dziękuję za wszelką pomoc
bostaf
Cytat(skleroza @ 23.06.2017, 11:25:12 ) *
1. Jak dodać zapytanie do URL

Masz na myśli jak dodać parametr do urla? Np. żeby zamiast http://url.pl/index.php?a=1 dostać http://url.pl/index.php?a=1&b=2 ? Czyli dodać b=2 do urla?

Cytat(skleroza @ 23.06.2017, 11:25:12 ) *
2. Jak opóźnić część skryptu

Co masz na myśli? Możesz podać jakiś prosty przykład przed i po?
skleroza
OK podam łopatologicznie smile.gif

W html wklejam adres BTC- ten adres jest wysyłany do php gdzie jest doklejany do url i skrypt wykonuje dalej działanie

Co do opóźnienia to zależy mi aby pierwsza część skryptu php - czyli pobranie danych z innej strony zostało wykonane od razu a druga część skryptu czyli pobranie z mojej bazy informacji i ich wyświetlenie - wykonało się po x czasie
freewalker
w PHP każda funkcja jest blokująca, dalszy kod się nie wykona, póki nie wykona się kod poprzedzający.

Masz 2 rozwiązania:
1: niech PHP liczy sobie for(i) do 100 tryliardów, opóźni to resztę o kilkanaście sekund, może minut wink.gif
2: a teraz na poważnie:

$start = time();

while(true) {
if ((time() - $start) > 300) {
return false; // opóźnienie dalszego kodu o 300 sekund
}
}
// dalszy kod do przerobienia
skleroza
Cytat(freewalker @ 25.06.2017, 23:22:57 ) *
2: a teraz na poważnie:


Coś jest nie tak, wiem że ta funkcja opóźnia działanie - ładowanie
  1. $url = "https://blockchain.info/address/1CoAgA2Bb9XDMsBv6cE1YNuU5Z1BormTTc";
  2.  
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL,$url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  6. curl_setopt($ch, CURLOPT_TIMEOUT, 25);
  7. $wejscie = curl_exec($ch);
  8. curl_close($ch);
  9.  
  10. preg_match('/<div class="col-md-5">(.+?)<\/div>/ism', $wejscie, $wyjscie);
  11. preg_match('/<div class="col-md-4" style="overflow:visible;">(.+?)<\/div>/ism', $wejscie, $wyjscie1);
  12.  
  13. echo($wyjscie[0]);
  14. echo($wyjscie1[0]);
  15.  
  16. $start = time();
  17.  
  18. while(true) {
  19. if ((time() - $start) > 300) {
  20. return false; // opóźnienie dalszego kodu o 300 sekund
  21. }
  22. }
  23. // dalszy kod do przerobienia
  24.  
  25. $baza = "blebleble................";
  26.  
  27. echo($baza)
  28. ?>


ale zwraca mi tylko jeden wynik:
  1. preg_match('/<div class="col-md-5">(.+?)<\/div>/ism', $wejscie, $wyjscie);

roobik
Zamiast preg_match daj preg_match_all
viking
A po co chcesz to opóźniać?
skleroza
Cytat(roobik @ 26.06.2017, 08:41:12 ) *

Dzięki ale to nie pomaga w opóźnieniu dalszej części skryptu

Cytat(viking @ 26.06.2017, 09:04:35 ) *
A po co chcesz to opóźniać?

Powiedzmy że chciałbym aby wyglądało że drugi wynik jest szukany (przez określony czas)
nospor
Zle sie za to zabierasz. Jak ajaxem lecisz po cos, to nie mozesz dostac cos, wyswietlic to i zaraz znowu dostac to samo. AJAX zwraca ci wszystkie dane naraz, niezalznie czy dajesz tam jakies opoznienia czy nie - wszystko otrzymasz na raz.

Jak chesz miec opoznienie, to zrob je poprostu w js. AJAXem pobierzesz wszystkie dane, a w js daj setTimeout() by wyswietlic reszte danych po jakims czasie. Oczywiscie dobrze by bylo jakby ajax zrocil ci dane w postaci JSON - latwiej to pozniej obrabiac.


Cytat
Dzięki ale to nie pomaga w opóźnieniu dalszej części skryptu
No raczej, ale tak to jest jak osoba odpowiadajaca czyta temat po lebkach wink.gif
skleroza
Cytat(nospor @ 26.06.2017, 10:47:27 ) *
Jak chesz miec opoznienie, to zrob je poprostu w js. AJAXem pobierzesz wszystkie dane, a w js daj setTimeout() by wyswietlic reszte danych po jakims czasie. Oczywiscie dobrze by bylo jakby ajax zrocil ci dane w postaci JSON - latwiej to pozniej obrabiac.


Dzięki pobawię się tym i zobaczę co wyjdzie - prosto nie będzie bo "skleroza" i trzeba sobie wszystko od nowa przypomnieć smile.gif

OK - a co z pierwszym moim pytaniem jak dodać do URL ? bo próbowałem już POST, GET, CURLOPT_POST i inne sposoby ale przy tym co podałem w pierwszym poście ni hoho mi nie dokleja do URL
  1. $url = "https://blockchain.info/address/TU MA DOKLEJAĆ adres z formularza http";
nospor
Kod co miales:

$url = "https://blockchain.info/address/{$_POST['search_id']}";

Jest poprawny. Jedyny problem jaki masz,to poprostu zle AJAXem przesylasz te search_id i tyle. Problem lezy w twoim kodzie js. Z tego co widze to przesylasz tylko wartosc tego pola. Zapomniales o nazwie.
skleroza
Cytat(nospor @ 26.06.2017, 11:25:56 ) *
Kod co miales:

$url = "https://blockchain.info/address/{$_POST['search_id']}";

Jest poprawny. Jedyny problem jaki masz,to poprostu zle AJAXem przesylasz te search_id i tyle. Problem lezy w twoim kodzie js. Z tego co widze to przesylasz tylko wartosc tego pola. Zapomniales o nazwie.


Dzięki smile.gif
Oto poprawka i działa smile.gif
  1. ajax.js
  2.  
  3. function get(obj) {
  4. var poststr = "search=" + encodeURI( document.getElementById("search").value );
  5. makePOSTRequest('getrsaccounts.php', poststr);
  6.  
  7. html
  8.  
  9. <form action="java script:get(document.getElementById('myform'));" name="myform" id="myform">
  10. <input type="text" name="search" id="search" />
  11. <input type="button" name="button" value="Submit" onclick="java script:get(this.parentNode);">
  12. </form>
  13. <span name="myspan" id="myspan"></span>
  14.  
  15. php
  16.  
  17. $url = "https://blockchain.info/en/address/{$_POST['search']}";


Teraz jeszcze pozostaje mi powalczyć z setTimeout() - zobaczymy co z tego wyjdzie


Cytat(skleroza @ 27.06.2017, 11:19:40 ) *
Teraz jeszcze pozostaje mi powalczyć z setTimeout() - zobaczymy co z tego wyjdzie


To może zamiast bawić się w opóźnianie ktoś mi podpowie czy da się i ewentualnie jak zrobić coś takiego
Pierwsza część skryptu działa już OK. Jak przenieść {$_POST['search']} do innego pliku php np 2.php.
W 1.php daję np. coś takiego:
  1. $baza = "2.php?={$_POST['search']}";
  2. echo "<button><a target=\"_blank\" href=\"$baza\"><h4>Baza</h4></a></button>";


I chciał bym aby w pliku 2php wykonało mi np.:
  1. $a = "/search?q={$_POST['search']}";
  2. echo "<button><a target=\"_blank\" href=\"$a\"><h4>a</h4></a></button>";
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.