2012-07-06 4 views
1

javascript je construis une chaîne comme ça ...Eval erreur de référence

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: " + userName + "}"; 

Ceci est mis plus tard à travers et déclaration eval comme ça ...

var obj = eval('(' + txt + ')'); 

Lorsque ce happenings I obtenir une erreur de référence indiquant que la valeur de la variable de nom d'utilisateur est indéfinie.

Est-ce que quelqu'un sait la raison de ceci? Est-ce quelque chose de simple que j'ai manqué?

+4

Y at-il une raison pour laquelle vous n'utilisez pas ['JSON.parse'] (https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/JSON/parse) au lieu de 'eval'? –

+2

'eval ('(' + txt + ')')'? Mais de toute façon, où 'userName' est-il défini? – raina77ow

+0

Ceci fonctionne sur un ancien téléphone Blackberry où json.parse ne fonctionne pas. –

Répondre

1

vos citations manquantes autour de la variable nom d'utilisateur:

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: '" + userName + "'}"; 

Je suppose que vous voulez stocker la valeur de chaîne du nom d'utilisateur dans votre userName var iable. Comme il n'était pas cité, il traitait la valeur du nom d'utilisateur comme variable. Ainsi, par exemple, si le nom d'utilisateur était "testValue123", il aurait été userName: testValue123 au lieu de userName: 'testValue123'

0

Au lieu de eval(), je suggère d'utiliser la méthode $.parseJSON() si jQuery est disponible:

jQuery:

$(function(){ 
    var userName = 'me'; 

    var txt = '{"authenticationToken": 1, "authenticated": 2, "authenticationTokenExpiry": 3, "sessionTimeoutMinutes": 4, "userName": "' + userName + '"}'; 

    var obj = $.parseJSON(txt); 
}); 

NOTE: La chaîne a dû être modifié pour satisfaire à l'exigence d'un chaîne JSON bien formée

Démo: http://jsfiddle.net/WTC7k/

Cependant, la raison pour laquelle vous rencontrez l'erreur que la valeur de userName est indéfini est que vous devez placer la chaîne entre guillemets pour permettre eval() fonctionne correctement:

var userName = 'me'; 

var txt = "{authenticationToken: 1, authenticated: 2, authenticationTokenExpiry: 3,sessionTimeoutMinutes: 4,userName: '" + userName + "'}"; 

var obj = eval('(' + txt + ')'); 

Demo: http://jsfiddle.net/9rtgK/

+0

Oui, ce serait idéal, mais malheureusement, ce code est pour une application Blackberry sur un modèle plus ancien. JSON.parse n'est pas disponible. –