2013-06-05 22 views
17

używam następującą funkcję aby umieścić formularz, aby poprzez jquery ajaxparsowania odpowiedź jquery ajax

$('form#add_systemgoal .error').remove(); 
var formdata = $('form#add_systemgoal').serialize(); 
$.ajaxSetup({async: false}); 
$.ajax({  
    type: "POST", 
    url: '/admin/systemgoalssystemgoalupdate?format=html', 
    data: formdata, 
    success: function (data) { 
     console.log(data); 
    }, 
}); 

To stanowisk w porządku, ale nie mogę analizować respons, rejestruje pocieszyć następująco

{"success":1,"inserted":{"goal_id":"67","goalsoptions_id":"0","user_id":"0","value":"dsfdsaf","created":"2013-06-05 09:57:38","modified":null,"due":"2013-06-17 00:00:00","status":"active","actions_total":"0","actions_title":"sfdgsfdgdf","action_type":"input","points_per_action":"1","expires":"2013-06-11 00:00:00","success":1}} 

uważam, że jest to odpowiedź, której szukam, jednak gdy próbuję zrobić alert (data.success); lub dowolny inny element obiektu odpowiedzi jest niezdefiniowany.

Wszelkie porady mile widziane

+2

'Typ danych:„json''. Czy celowo wprowadziłeś parametr?? Format = html'? Co to znaczy? – zerkms

+1

Jeśli Twój URL AJAX zwraca nagłówek treści odnoszący się do JSON, nie potrzebujesz nawet $ .parseJSON (yourdata), ponieważ jQuery automatycznie to zrobiłaby automatycznie. Robię to, aw każdej odpowiedzi mam również niestandardowy kod statusu. W ten sposób możesz łatwo sprawdzić, czy to się stało, czego się spodziewałeś. –

Odpowiedz

13

nazywając

var parsed_data = JSON.parse(data); 

powinny skutkować możliwością dostępu do danych, jak chcesz.

console.log(parsed_data.success); 

powinien pokazać '1'

+1

Nie parsuj json po otrzymaniu.Wskaż 'dataType: 'json'' w oryginalnym żądaniu, a otrzymasz json, a nie tekst. –

0

Wpisz parseJSON. Spójrz na doc

var obj = $.parseJSON(data); 

coś takiego:

$.ajax({  
    type: "POST", 
    url: '/admin/systemgoalssystemgoalupdate?format=html', 
    data: formdata, 
    success: function (data) { 

     console.log($.parseJSON(data)); //will log Object 

    } 
}); 
+0

Ma sens, aby naprawić źródła problemu, a nie jego konsekwencje – zerkms

9
$.ajax({  
    type: "POST", 
    url: '/admin/systemgoalssystemgoalupdate?format=html', 
    data: formdata, 
    success: function (data) { 
     console.log(data); 
    }, 
    dataType: "json" 
}); 
1

Ponieważ używasz $.ajax, a nie $.getJSON Twój typ zwracany jest zwykły tekst. musisz teraz przekonwertować obiekt data na obiekt JSON.

możesz to zrobić, zmieniając swój $.ajax na $.getJSON (który jest skrótem dla $.ajax, tylko wstępnie skonfigurowany, aby pobrać json).

Albo można analizować ciąg do JSON data po otrzymaniu go, tak jak poniżej:

success: function (data) { 
     var obj = $.parseJSON(data); 
     console.log(obj); 
    }, 
3

trzeba analizować JSON ciąg się przedmiotem

var dataObject = jQuery.parseJSON(data); 

więc można nazwać jak:

success: function (data) { 
    var dataObject = jQuery.parseJSON(data); 
    if (dataObject.success == 1) { 
     var insertedGoalId = dataObject.inserted.goal_id; 
     ... 
     ... 
    } 
} 
5

Wyobraź sobie, że to jest Twoja odpowiedź JSONA

{"Visit":{"VisitId":8,"Description":"visit8"}} 

ten sposób można przeanalizować odpowiedź i dostęp do wartości

Ext.Ajax.request({ 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    url: 'api/fullvisit/getfullvisit/' + visitId, 
    method: 'GET', 
    dataType: 'json', 
    success: function (response, request) { 
     obj = JSON.parse(response.responseText); 
     alert(obj.Visit.VisitId); 
    } 
}); 

To zaalarmować pole VisitId