2012-10-18 4 views
1

J'ai suivi les instructions ici Problem performing Ajax call from ASP.NET MVC2 app et je lis à propos de JSON. J'ai beaucoup cherché mais je n'ai pas trouvé de réponse. J'utilise le code suivant:Le champ de réponse JSON est indéfini

Vue:

<script type="text/javascript"> 
var userName = $("#userName").val(); 

$.ajax({ 
    type: 'POST', 
    url: '/Home/PgAJAXTest', 
    data: { 
     q: 'Test1', 
     s: 'Test2' 
    }, 
    success: function (bbb) { 
     alert(bbb.Val13); 
    }, 
    error: function (msg) { 
     alert("error"); 
    } 
}); 

</script> 

code du contrôleur ASP.NET MVC est:

[HttpPost] 
    public JsonResult PgAJAXTest(string q, string s) 
    { 
     var a = Json(new { Val13 = " TEST " }); 
     return a; 
    } 

Le problème est que je reçois "undefined".
Si je change alert(bbb.Val13);-alert(bbb); je reçois {"Val13":" TEST "}

Je suppose qu'il a quelque chose à voir avec le contrôleur ne pas retourner JSON exactement au format JSON attend.

Répondre

3

Vous êtes obtenir une réponse de chaîne.

Utilisez quelque chose comme

success: function (bbb) { 
    var response = jQuery.parseJSON(bbb); 
    alert(response.Val13); 
} 

Puisque vous utilisez jQuery, vous pouvez utiliser jQuery.parseJSON pour analyser la chaîne.

+0

Oui, cela a résolu Merci! Mais comment obtenir une réponse JSON régulière (donc je peux utiliser bbb.Val13)? – Clangon

+0

Votre réponse vient sur http, donc le résultat est une chaîne par défaut. Soit vous parserez le JSON vous-même comme ci-dessus, soit vous obtiendrez jQuery pour le faire en définissant 'type de données: 'json'' tout en faisant la requête. – nunespascal

+0

@ tereško oui, je suis d'accord en utilisant 'JSON.parse' ou' jQuery.parseJSON' est mieux. Mise à jour ma réponse – nunespascal

0

Essayez cette

[HttpPost] 
    public JsonResult PgAJAXTest(string q, string s) 
    { 
     return Json(new { Val13 = " TEST " }); 
    } 
+0

Ceci est juste de ré-factoriser, cela ne résout pas son problème. – Niklas

+0

Cela a le même problème. J'ai seulement ajouté la variable "a" pour pouvoir déboguer plus facilement. – Clangon

+0

Oui désolé, S'il vous plaît semate mattytommo's réponse –

1

Vous devez ajouter datatype: 'json' à votre demande JQuery AJAX.

Essayez:

<script type="text/javascript"> 
var userName = $("#userName").val(); 

$.ajax({ 
    type: 'POST', 
    datatype: 'json', 
    url: '/Home/PgAJAXTest', 
    data: { 
     q: 'Test1', 
     s: 'Test2' 
    }, 
    success: function (bbb) { 
     alert(bbb.Val13); 
    }, 
    error: function (msg) { 
     alert("error"); 
    } 
}); 

</script> 
+1

Oui, vous êtes wright. mais vous avez foiré des citations dataType: 'json' –

+1

Cela ne semble pas aider. – Clangon

+0

@Clangon Hmmm, votre code est-il EXACTEMENT affiché? Il semble que les noms de variables utilisés dans le JS et la création d'objet JSON dans la création soient différents, même s'ils sont différents d'une lettre majuscule, cela compte toujours. – mattytommo