2009-10-01 4 views
2

J'ai un problème qui me rend fou, et selon tout ce que j'ai vu et lu en ligne, ça devrait fonctionner correctement. J'utilise jQuery avec mon application Rails au lieu du prototype et j'utilise le plugin ajaxForm pour envoyer des données de formulaire via ajax. Les données du formulaire sont soumises correctement, l'action du contrôleur correspondant est appelée fine, le bloc response_to correct pour le type js est appelé bien.jQuery + Rails + ajaxForm + js.erb problème

Le problème se pose dans le fait que le contenu du fichier * .js.erb est renvoyé au navigateur client et non interprété comme javascript. Rien ne se passe réellement avec. Oui, j'ai défini le type de données: 'script' mais cela ne marche toujours pas. J'ai également essayé de ne pas utiliser le plugin ajaxForm et d'utiliser manuellement une fonction $ .post sur le formulaire submit, mais toujours le même résultat.

pour quelques exemples de code, voici mon appel ajaxForm:

$("#purchase-item-form").ajaxForm({ 
    dataType: 'script' 
}); 

je aussi suis en train de bien l'accepte en-tête, ce fonctionne bien parce que mon bloc format.js est celui en cours d'exécution

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") } 
}); 

dans mon action * fichier .js.erb tout ce que j'ai est une déclaration d'alerte au moment de faciliter le débogage de la question jusqu'à ce que je peux le comprendre:

alert("action processed successfully"); 

Cela ne fonctionne tout simplement pas dans firefox ou safari. Si je regarde dans la console firebug, je peux voir l'instruction d'alerte renvoyée en réponse à l'appel ajax, ce n'est juste pas évalué par le client comme javascript.

Pour votre information, je suis en cours d'exécution sur Rails 2.3.4 et jQuery 1.3.2 si cette matière

+0

En-têtes de réponse? –

Répondre

2

je courais dans la EXACT même problème. Vous devez manuellement eval le code qui est retourné. Je ne me souviens pas exactement pourquoi ça ne s'est pas évalué, mais j'utilisais les mêmes plugins que toi et ça l'a corrigé.

Édition 1:En lisant article car il a aidé à résoudre le problème.

Edit 2: Effectuez les actions suivantes:

$("#purchase-item-form").ajaxForm({ 
    dataType: 'script', 
    success: evalResponse 
}); 

function evalResponse(responseText, statusText) { 
    eval(responseText); 
} 

Regardez here un peu plus d'informations.

+0

pouvez-vous élaborer un peu plus sur ce que vous voulez dire? eval comment? – cpjolicoeur

+0

merci pour le lien. J'ai ajouté l'option dataType au $ .ajaxSetup global et il semble avoir résolu le problème. étrange que cette option inline dataType n'a pas fait de différence, mais merci pour l'aide. – cpjolicoeur

+0

Je suis contente que vous ayez compris ce qui n'allait pas même si je changeais toujours ma réponse = P –