Lire cross domain réponse JSON
<script>
$.ajaxSetup( {contentType: 'application/json'} );
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
jsonp: false,
jsonpcallback: result()
});
}
function result(){
alert('back in')
alert(data)
}
function jsonp1300279694167(){
alert('dhoom')
}
</script>
J'ai le script ci-dessus de l'interrogation à travers le domaine et l'affichage des données dans un formulaire.
Tout semble bien fonctionner. Réponse JSON peut être vu dans la console de firebug. Je veux processus de la réponse et l'affichage des messages d'état en conséquence à l'utilisateur. Comment dois-je réaliser?
Mise à JOUR
J'ai essayé comme suggéré par T. J. Crowder mais n'avez pas de chance encore. Le code modifié est comme ci-dessous
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?"+data_string,
dataType: "jsonp",
crossDomain: true,
success: handleSuccess()
});
}
function handleSuccess(data) {
alert("Call completed successfully");
alert(data);
}
Ce n'accède data
et alertes undefined
. Si j'essaie de passer de success: handleSuccess()
il erreurs et des redirections avec une requête http.
Je reçois la réponse d'un Ruby on Rails
application. Voici la méthode que je suis frapper
def create
errors = ContactUsForm.validate_fields(params)
logger.info errors.inspect
if errors.blank?
respond_to do |format|
format.json {render :json => {:status => 'success'}.to_json}
end
else
respond_to do |format|
format.json {render :json => {:status => 'failure', :errors => errors}.to_json}
end
end
end
Est-il une chose que j'ai besoin de configurer dans mon application rails
OriginalL'auteur Pravin | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
Vous êtes à proximité. Il vous suffit d'utiliser le
success
de rappel, comme d'habitude (voir lesajax
docs), pas une en particulier:Aussi, votre code:
...serait appel la
result
fonction et ensuite utiliser sa valeur de retour de lajsonpresponse
propriété de l'appel ajax. Si vous souhaitez utiliser une fonction distincte, c'est très bien, mais vous ne comprennent pas la()
, donc:Aussi, je suis sûr que vous n'avez pas besoin/envie de la
jsonp
paramètre si vous utilisezsuccess
, donc:Enfin: Êtes-vous sûr vous souhaitez définir
contentType
? Qui se rapporte au contenu envoyé à le serveur, pas le contenu en cours de réception. Si vous êtes vraiment à la publication JSON données encodées sur le serveur, grand, tu es beau; mais on dirait que vous êtes à l'aide de jQueryserialize
fonction, qui ne produira pas de JSON (il produit une URL-encodé chaîne de données). Donc, vous avez probablement vous souhaitez supprimercontentType
ainsi, à la fois à partir de l'appel et de laajaxSetup
appel.J'avais essayé presque tout, mais n'ont pas de chance encore. Mise à jour de la question avec les efforts déployés
Vous êtes encore à mettre
()
après le gestionnaire de nom de fonction (success: handleSuccess()
). Comme je l'ai dit dans la réponse ci-dessus, que appelle votrehandleSuccess
fonction immédiatement (avant l'appel ajax) et affecte sa valeur de retour de lasuccess
option pourajax
. Pour faire référence à une fonction sans l'appeler, vous quittez le()
off (par exemple, la réussite handleSuccess').OriginalL'auteur T.J. Crowder
J'espère que si vous pouvez essayer de jQuery-JSONP
jQuery-JSONP Comment
[Exemple]
OriginalL'auteur Ahmed
J'ai essayé de nombreux tutoriels, y compris les réponses ci-dessus, mais pas eu de chance. Donc, j'ai mis en place quelque chose comme ci-dessous
Forme
Soumettre fonction de la forme
Dans mon contrôleur
Et enfin à créer.js.erb
De cette façon, j'ai appelé
submit_form
sur le formulaire de soumission et appeléshow_errors
fonction javascript à partir du serveur lui-même. Et cela fonctionne..Mais encore, je voudrais avoir des commentaires si c'est la pire solution?
OriginalL'auteur Pravin