Ajax success raspuns cu spatiu

Incerc sa numar notificarile necitite si in cazul in care apare o notificare noua, sa dau play la un sunet

function waitForNewNoti() {
var audio = new Audio('audio/get_chat.mp3');
var oldnoty = $("#countnotifactions").text();

    $.ajax({
        type: "GET",
        url: 'count-notifications.php',
        async: true,
        cache: false,
        timeout: 50000,
        success: function(data) {
			if (data != oldnoty && data != 0){
				audio.play();
			}
            $('#countnotifactions').html(data);
            setTimeout(
                waitForNewNoti,
                2000
            );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            addmsg("error", textStatus + " (" + errorThrown + ")");
            setTimeout(
                waitForNewNoti,
                15000);

        }
    });

};

$(document).ready(function() {
	waitForNewNoti();
});

Problema este la data , vine cu un spatiu gol, un enter si apoi valoarea
Daca pun un alert(data); arata asa:
Capture
Cum as putea sa iau doar valoarea fara spatiu?

pai vezi count-notifications.php de ce returneaza cu spatiu

Cand intru in count-notifications.php e doar valoarea.
Daca punt doar $echo 1; tot asa se e. Daca nu as mai include functions.php apare in alert doar 1 fara spatiu.
Iar in functions.php nu gasesc nimic

pai cel mai probabil e in functions.php acel spatiu

fix local:

success: function(data) {
             data = data.trim();
			if (data != oldnoty && data != 0){
				audio.play();
			}
            $('#countnotifactions').html(data);
            setTimeout(
                waitForNewNoti,
                2000
            );
        },
1 Like

incearca sa pui ob_end_clean(); inainte de print in count-notifications.php

1 Like

Trecand peste problema pe care o ai cu returnatul cifrei 1, ai timeout-uri fara logica prin cod. La fiecare raspuns ajax (error sau success), tu reapelezi functia. Din ce imi dau eu seama, ai vrea ca functia sa fie apelata automat la un anumit interval. Pentru asta trebuie sa folosesti setInterval.

Inlocuieste

$(document).ready(function() {
	waitForNewNoti();
});

cu

setInterval(function() {
    waitForNewNoti();
}, 3000);

si scoate timeout-urile din event-uri.

1 Like

Nu știu dacă e idee prea bună să folosești setInterval(), dacă din diverse motive răspunsul dinspre server întârzie (poate chiar mai mult de 3 secunde), vei avea o serie de request-uri ajax concurente în așteptare.

Referitor la problema inițiatorului topicului, acel spațiu gol probabil vine din php. Ca să-ți vină spațiu gol din php nu e nevoie de echo, ci pur și simplu să deschizi sau să închizi incorect tag-urile php. De exemplu, secvențele astea de mai jos scuipă linie goală, “xxx”, linie goală.

[linie goala]
<?php
echo "xxx";
?>
[linie goala]
[linie goala]

Ca regula, trebuie să deschizi <?php pe fix prima linie, iar ?> poate să lipsească de tot. Eu de regulă nu închid niciodată fișierele php, tocmai ca să evit să-mi scuipe accidental spații goale de la sfârșitul fișierului.

1 Like

Salut @bunicu9 ,

Incepand cu decembrie 2019 vii pe forum cam de 2 ori pe luna si ceri ajutorul in problem de PHP/JS si cred ca in cele mai multe ori cineva a reusit sa iti ofere solutia. Cred ca ar fi foarte frumos din partea ta daca ai veni cu o scurta prezentare a proiectului la care lucrezi.

2 Likes

Pare ca face pe aici noul Facebook.
Daca vechiul tot a picat saptamana trecuta.

incerc doar sa invat. Am facut modificari la mai multe site-uri dar recent am inceput sa scriu de la 0 un site cu scopul de a invata