[ZEND/jQuery] Probleem met JSON data

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Scripter

PHP Scripter

08/04/2012 21:14:15
Quote Anchor link
Via een AJAX request binnen jQuery na het valideren van een form wordt er ingelogd doormdiddel van Zend_Auth, dit gaat allemaal goed totdat ik een JSON array wil retournen die er alsvolgt uitziet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
{"formValid":true}


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$this
->_helper->json((array(
            'formValid' => $this->_form->valid
        )));
?>


Maar jQuery kan hem maar niet uitlezen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
submitHandler: function() {
    $.ajax({
        type: 'POST',
        url: '',
        data: $(formId).serialize(),
        dataType: 'JSON',
        complete: function(data) {
            alert(data.formValid);
        }
    });
};


En krijg bij die alert continu: 'undefinded'. Heb dingen zoals de action en alle overige code even weggehaald. Ik weet niet waar het probleem zit en hoop daarom dat iemand mij kan helpen of eventueel mee kan denken.

Alvast bedankt en een fijne avond!
 
PHP hulp

PHP hulp

18/04/2024 08:15:57
 
Bas Cost Budde

Bas Cost Budde

08/04/2012 21:19:41
Quote Anchor link
firefox + firebug? Probeer dan eens console.log(data) in plaats van die alert... zie je veel meer.

Anders

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
var e='';
for (var i in data) e += i;
alert(e);
?>

krijg je een indruk van wat er zoal in data terugkomt.
 
PHP Scripter

PHP Scripter

08/04/2012 21:51:16
Quote Anchor link
Wat zou ik daar voor info moeten uithalen? Veel meer kan ik er niet uithalen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
readyState    4
responseText        "{"formValid":true}"
status            302
statusText        "Found"


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
readyStatesetRequestHeadergetAllResponseHeadersgetResponseHeaderoverrideMimeTypeabortdonefailprogressstateisResolvedisRejectedthenalwayspipepromisesuccesserrorcompletestatusCoderesponseTextstatusstatusText
Gewijzigd op 08/04/2012 21:52:09 door PHP Scripter
 
Wouter J

Wouter J

08/04/2012 21:53:30
Quote Anchor link
Is het niet "true" in JSON?

Bas, of chrome met de webkit web inspector of opera die ook al een inspector heeft, precies zoals IE. En ook FireFox heeft vanaf het begin al een console zonder firebug en ook FireFox heeft sinds FF10 een inspector (zeer slecht, maar dat laten we buiten beschouwing).
Gewijzigd op 08/04/2012 21:55:09 door Wouter J
 
Bas Cost Budde

Bas Cost Budde

08/04/2012 22:01:21
Quote Anchor link
ah. Je hebt dus de responseText nodig; kennelijk moet je die ook nog uitpakken. Hoe? Misschien met JSON.decode? (eval probeer ik te vermijden, dat is ook een optie)

@Wouter, true over de browsers. Ik weet niet uit mijn hoofd of je in JSON een bool moet quoten. Ik denk van niet.
 
Wouter J

Wouter J

08/04/2012 22:32:31
Quote Anchor link
Ik zie de fout al, je gebruik complete maar je moet success gebruiken dan werkt het wel. Complete geeft je een object met verschillende gegevens, zoals status en responseText.

@Bas, even getest en het hoeft niet.
 
PHP Scripter

PHP Scripter

08/04/2012 22:59:41
Quote Anchor link
Wouter J op 08/04/2012 22:32:31:
Ik zie de fout al, je gebruik complete maar je moet success gebruiken dan werkt het wel. Complete geeft je een object met verschillende gegevens, zoals status en responseText.

@Bas, even getest en het hoeft niet.


Dat heb ik bewust gedaan omdat hij in 'succes' helemaal niets doet omdat de JSON niet goed geretourneert wordt.
 
Wouter J

Wouter J

08/04/2012 23:06:42
Quote Anchor link
Dan moet je dit gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$.ajax({
    type: 'POST',
    url: '',
    data: $(formId).serialize(),
    dataType: 'JSON',
    complete: function(data) {
        var result = JSON.parse(data.responseText);
        alert(result.formValid);
    }
});


Maar dan is eigenlijk het hele nut van de JSON type weg, je moet nu namelijk alsnog zelf de JSON parsen.
 
PHP Scripter

PHP Scripter

08/04/2012 23:11:32
Quote Anchor link
@Wouter Het werkt inderdaad wel zo. Wat kan dan het probleem zijn? De 'Content-Type' die ZEND retourneert is ook 'application/json' en heb het ook al geprobeerd met 'text/html', maar werkt ook niet. Cache staat ook uit.
Gewijzigd op 08/04/2012 23:11:39 door PHP Scripter
 
Wouter J

Wouter J

08/04/2012 23:27:41
Quote Anchor link
Kun je geen online voorbeeldje maken ofzo? Ben ook wel benieuwd.

Eventueel kun je zelf een AJAX request als test maken die wel werkt (dus gewoon naar een normale test.json bestand ofzo). Vervolgens ga je de jqXHR objects vergelijken in bijv. de complete, beforeSend en 302 status callback. Zie je verschillen tussen de Zend en de test versie?
 
PHP Scripter

PHP Scripter

08/04/2012 23:37:31
Quote Anchor link
Online voorbeeld gaat nu (vanavond) niet meer lukken. Maar ik vindt dit gewoon erg raar.

Graag zie ik jullie reacties tegemoet.

Toevoeging op 09/04/2012 12:45:19:

Totdat ik een oplossing heb gevonden blijf ik even de 'oplossing' van Wouter gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var result = JSON.parse(data.responseText);


Ik hoop dat er in de tussentijd iemand een oplossing heeft.
 
Niels K

Niels K

16/04/2012 19:34:10
Quote Anchor link
Hoi PHP Scripter,

Ik test net een JSON calletje en dit werkt bij mij?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$.ajax({
    url: 'voerhierdeurlin/',
    data: $('#bla').serialize(),
    dataType: 'JSON',
    type: 'POST',
    success: function(data) {
        alert(data.keydieindejsonarrayzit);    
    }
});
 



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.