2011-04-10 2 views
3

Dans le code suivant, je suis en train d'envoyer une paire clé-valeur et je reçois toujours l'erreur:
« : manquant après id propriété »Erreur « : manquant après id propriété » lorsque vous utilisez Jquery fonction ajax

$(".general").change(function() { 
    fields = { $(this).attr('id') : "1" }; 
    $.ajax({ 
    type: "POST", 
    url: "ajax/update_general.php", 
    data: { fields: fields }, 
    dataType: "json", 
    }); 
}) 

J'ai pensé que ce qui cause le problème est:

$(this).attr('id') 

Mais je n'ai pas la moindre idée pourquoi. J'ai essayé d'assigner $ (this) .attr ('id') à une variable, et mettre la variable dans l'appel ajax, mais cela n'a pas aidé. Comment puis-je résoudre ce problème?
Merci!

Répondre

8

C'est une erreur de syntaxe. Vous ne pouvez pas utiliser la valeur de retour d'un appel de fonction en tant que nom de propriété.

Vous pouvez toutefois utiliser cette valeur de retour dans la notation de support après initialisation de l'objet:

fields = {}; 
    fields[$(this).attr('id')] = '1'; 
+1

+1 @Israel: Attention que ballants virgule après 'dataType: "JSON"', aussi. IE7 et les versions antérieures pensent qu'il s'agit d'une erreur de syntaxe, il peut y avoir d'autres implémentations qui font aussi bien que c'était un peu vague dans la 3ème édition (la 5ème édition l'efface, c'est valide). Détails: http://blog.niftysnippets.org/2010/09/literal-improvement.html –

+0

Bolt - merci, ça l'a fait :) – Israel

+0

Crowder - merci aussi, je vais vérifier! – Israel

0

Lors de la déclaration objet avec {} syntaxe, seules les chaînes (comme { 'foo': 1}) ou une chaîne nue est autorisée ({foo: 1})

Vous devriez écrire quelque chose comme ceci:

var fields = {}; 
fields[$(this).attr('id')] = 1; 
0

Modifier cette ligne:

fields = { $(this).attr('id') : "1" };

à ceci:

fields = $(this).attr('id') || "1";

C'est si vous l'intention d'avoir quelque chose comme une valeur par défaut.

Si vous voulez un objet, utilisez ceci:

fields[$(this).attr('id')] = "1";

Questions connexes