2010-05-17 7 views
3

J'ai un tableau:jQuery - maintenant: Création d'un objet et le stockage de valeurs pour passer à un appel AJAX

myarr = []; 

Je le remplir avec des valeurs:

myarray['name'] = "Me!"; 

maintenant Je veux transformer ce tableau en un ensemble de paires Key => Value. Je pense que jQuery le ferait automatiquement, mais cela ne semble pas le cas.

$.ajax 
({ 
    type: "POST", 
    dataType: "text", 
    url: "myurl", 
    data: myarr 
}); 

Y at-il un moyen de faire ceci ou quelque chose que je fais mal? Je ne reçois aucune erreur javascript, et aucune erreur côté serveur autre que pas d'informations POST du tout.

J'ai besoin que la demande soit envoyée en tant que true POST request. Je dois garder le code php simple car parfois le login ne sera pas être un appel AJAX.

J'essaie maintenant ce qui suit avec une erreur unexepected token ':'

myarr: 
{ 
    'name':'me' 
} 

La question est maintenant devenu: Comment puis-je initialiser un nouvel objet javascript comme « blanc », comment puis-je configurer les correspondances, et Comment puis-je le passer dans un appel AJAX?

Répondre

6

L'attribut de données est un objet, il utilise la notation comme ceci:

data: { 'Name': 'Me!' } 

Non

data: ['Name':'Me!'] 

Vous devez convertir votre tableau en objet. Vous pouvez le faire facilement en place d'un tableau:

myData.Name = 'Me'; 
myData.OtherProp = 'Something'; 

Voici quelques exemples:

$.ajax({ 
    type: 'POST', 
    dataType: 'text/html', 
    url: 'myUrl.php', 
    data: 
    { 
     'Name': 'Me!' 
    }, 
    success: function(data, status) 
    { 
     // data is the returned response 
    } 
}); 

OU

var myObject = new Object(); 

myObject.Name = 'Me!'; 

$.ajax({ 
    type: 'POST', 
    dataType: 'text/html', 
    url: 'myUrl.php', 
    data: myObject 
}); 

deux devraient vous faire au bon endroit.

+0

Mais j'ai envoyé des chaînes comme 'name = me & user = new & date = today' dans le champ de données avant sans problème. J'ai besoin de savoir comment ça se passe du côté serveur. Il doit être une vraie demande POST. –

+0

jQuery effectue la transformation d'un objet en données publiées pour vous. – Tejs

+0

Génial, laissez-moi essayer ça. Je pensais que cela transformerait ce tableau, mais je suppose que non. –

2

Vous ne pouvez pas passer le tableau directement, vous devez d'abord le coder, puis le transmettre. Par exemple, vous pouvez utiliser json2.js de json.org pour coder comme JSON:

var mydata = JSON.stringify(myarr); 
$.ajax 
({ 
type: "POST", 
dataType: "text", 
url: "myurl", 
data: {"mydata" : mydata} 
}); 

Ensuite, vous aurez besoin d'utiliser json_decode en PHP pour convertir la chaîne JSON retour à un tableau.

Mise à jour

Pour répondre à vos questions nouvelles:

Comment puis-je initialiser un nouvel objet javascript comme "vide"?

Vous pouvez créer un nouvel objet comme ceci:

var myObj = {}; 

Comment puis-je configurer les correspondances?

Il y a deux manières différentes:

myObj.name = "Me!"; 
myObj['name'] = "Me!"; 

Comment puis-je passer dans un appel AJAX?

Il suffit de passer directement comme argument data:

data: myObj 
+0

Je l'aime, mais je suis en ce moment en utilisant CodeIgniter et je ne peux pas mettre un appel 'json_decode' dedans là. Je dois juste l'envoyer comme un vrai ensemble de valeurs POST. –

+0

J'utilise aussi CodeIgniter, et j'ai utilisé 'json_decode' dans mon application de temps en temps. Par exemple: '$ data = json_decode ($ this-> input-> post ('mydata'), true);' –

+0

Je vais y jeter un coup d'oeil, mais pouvez-vous clarifier la syntaxe donnée par Tejs? –

0

Continuer exactement comme vous avez été, mais le changement [à {et]} (qui change votre tableau à un objet)

Questions connexes