geen response van mijn ajax call

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ralph van der Tang

ralph van der Tang

14/05/2013 10:13:13
Quote Anchor link
hoi iedereen,

ik heb een probleem met mijn ajax.
het heeft gewerkt maar om een of andere reden krijg ik een error terug en wel de volgende:
TypeError: data is null.

dat komt neer op de regel : if(data.success.

hier onder mijn javascript en controller.

ben benieuwd wat het nu is wat ik heb geen idee

alvast bedankt
Mvg Ralph


de var name geeft de waarde weer die in het input veld staat als ik hem alert die doet het dus.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
function tagInput(){

var
name = $("input#tag_invoeren").val();

    if(name){
        $.ajax(
        {

            type: "POST",
            url: "<?php echo Settings::$url;?>/"+ReadCookie('lang')+"/adminajax/content/savetag",
            data: { txt : name },
            dataType: 'json',
            success: function(data){
                if(data.success)
                    {

                        $('.admin_tag').show().html('<h3>Tag is toegevoegd</h3>').delay(2000).fadeOut(200, function(){getSubTab('tag overzicht');});
                    }
    
                else
                    {
                        $('.admin_tag_false').html('<h3>Tag bestaat al</h3>').show().delay(5000).fadeOut(1000);
                    }
            },

            error: function(){alert('jammer jongen, hij doet het niet');}
        });
    }

    else
    {
        $('.admin_tag_false').html('<h3>Vul tag in.</h3>').show().delay(5000).fadeOut(1000);
    }
}

?>

de savetag functie
ook var_dump() laat hier niks zien.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
if($this->arguments[0] == "savetag")
        {

        
            $tekst = $_POST['txt'];
            echo json_encode(array('success' => true));
        
            echo $tekst;
            $sql_select="SELECT `name` FROM tags WHERE `name` = ".Database::quote();
            $test = Database::execute($sql_select);
            var_dump($sql_select);
            if($test[0]['name']!= '')
            {

                echo json_encode(array('success' => false));
            }

            else
            {
                $sql_insert="INSERT INTO `tags`(name) VALUES (".Database::quote($_POST['txt']).")";
                database::insert($sql_insert);
            }    
        }

?>
 
PHP hulp

PHP hulp

05/11/2024 22:21:01
 
Erwin H

Erwin H

14/05/2013 10:22:54
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql_select
="SELECT `name` FROM tags WHERE `name` = ".Database::quote();
?>

Je query wordt dus:
"SELECT `name` FROM tags WHERE `name` = ";

Als je niets aan de functie quote geeft, krijg je ook niets terug. Ik ga ervanuit dat dit niet is wat je wilt.

Verder moet je als je JSON wilt terugsturen altijd maar 1 echo doen. Niet meerdere.
 
Ralph van der Tang

ralph van der Tang

14/05/2013 10:27:41
Quote Anchor link
ok ook na het geven van een waarde krijg ik de zelfde error maar in elk geval bedankt voor het opmerekn van deze fout
 
Erwin H

Erwin H

14/05/2013 10:36:53
Quote Anchor link
Vervolgens dan iets met de tweede opmerking gaan doen. Zolang je meerdere echo's geeft zal je problemen blijven ondervinden. Javascript verwacht namelijk 1 json encoded datastring terug en niet meerdere.
 
Ralph van der Tang

ralph van der Tang

14/05/2013 10:39:18
Quote Anchor link
ok ik zal er is een weg halen en kijken wat er gebeurd want ik weet dat hij het met een ook niet deed ik heb die echo $test toegevoegd als debugger maar dat moet dus anders


Toevoeging op 14/05/2013 10:48:07:

denk dat het probleem ergens anders zit want overal waar ik een return moet krijgen werkt het niet
 
Erwin H

Erwin H

14/05/2013 11:02:03
Quote Anchor link
Het testen van een ajax verbinding kan je het beste in twee stappen doen. Roep eerst de php pagina gewoon direct in je browser op. In dit geval heb je wel POST data nodig, maar dat kan je gewoon vervangen door een tijdelijke vast waarde in je script. De response zou je dan gewoon direct in je browser moeten zien als een string. Zet daarbij ook error reporting aan zodat je fouten kunt zien.

Als de php pagina gewoon goed werkt, kan je de ajax call testen in je document. Omdat je weet dat de afhandeling op de server goed gaat, moet elke dan nog optredende fout in je javascript zitten. Plaatst dan eerst een alert in je success functie om te zien of je daar uberhaupt wel komt.
 
Ralph van der Tang

ralph van der Tang

14/05/2013 11:10:54
Quote Anchor link
daar komt dus niks en het heeft wel gewerkt dat is juist zo vreemd


Toevoeging op 14/05/2013 11:14:52:

het is idd wel handig om de error reporting aan te zetten werk samen met een collega in github en hij zet het constant uit kennelijk

Toevoeging op 14/05/2013 11:33:31:

was een ; vergeten kennelijk een paar 100 regels hoger nu werkt het wel bedannkt Erwin
 
Erwin H

Erwin H

14/05/2013 11:44:03
Quote Anchor link
Dat zijn dus de problemen die zo lastig te vinden zijn bij ajax calls. Omdat je de errors in php niet ziet (maar als er iets fout gaat een andere error in javascript), is het altijd verstandig om eerst je php script uitvoerig te testen met directe aanroepen. Pas als dat allemaal zonder problemen gaat kan je het vanuit javascript aanroepen.

Door schade en schande wijs geworden zullen we maar zeggen :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.