jquery.la forme et les demandes inter-domaine

Je vais avoir un moment difficile essayer de faire jquery.formulaire avec une demande de domaines. Je vais avoir des problèmes avec Firefox et Chrome (n'essayez même pas IE encore).

Explication: mon site est situé à l'intérieur de http://www.mysite.com. Cependant, mon formulaire de contact est sur un autre serveur, référencé par http://contact.mysite.com . J'ai pensé que de le mettre sur un sous-domaine serait pas de côté les questions concernant les demandes inter-domaine, mais apparemment, ce n'est pas le cas. http://contact.mysite.com est mis en œuvre dans Sinatra.

Mon javascript le programme d'installation n'a rien de fantaisiste. La forme de points d'action pour http://contact.mysite.com et la méthode est POST:

<form id="contact" action="http://contact.mysite.com/" method="post">

jquery.la forme est configuré avec une ajaxForm appel:

$(document).ready(function() {

  $('#contact').ajaxForm({
    success: function() { $('#success').fadeIn("slow"); },
    error: function() {  $('#error').fadeIn("slow"); }
  });

});

Le premier problème que j'ai rencontré était avec Firefox 3.5 - apparemment, il envoie une requête OPTIONS attend une réponse du serveur. J'ai utilisé cette question pour configurer mon Sinatra app ainsi, il a fait ce qui était attendu (il semble que les versions plus récentes de sinatra inclure des options verbe):

require 'rubygems'
require 'sinatra'
require 'pony'

# patch sinatra so it handles options requests - see https://stackoverflow.com/questions/4351904/sinatra-options-http-verb
configure do
  class << Sinatra::Base
    def options(path, opts={}, &block)
      route 'OPTIONS', path, opts, &block
    end
  end
  Sinatra::Delegator.delegate :options
end

# respond to options requests so that firefox can do cross-domain ajax requests
options '/' do
  response['Access-Control-Allow-Origin'] = '*'
  response['Access-Control-Allow-Methods'] = 'POST'
  response['Access-Control-Max-Age'] = '2592000'
end

post '/' do
  # use Pony to send an email
  Pony.mail(...)
end

Avec jquery 1.4.3, j'ai vu sur firebug une demande d'OPTIONS suivies par une requête POST (état 200. Le courriel a été envoyé). Avec jquery 1.3.2 ou 1.5, la demande d'OPTIONS a été montré (l'e-mail n'a pas été envoyé).

Néanmoins, la error rappel est toujours tiré avec toutes les versions de jquery, j'ai essayé. J'ai tracé jusqu'à la $.ajax(...) appeler, donc je ne suis pas sûr de savoir si ce problème vient de jquery.forme ou jquery lui-même.

J'ai essayé de vous déconnecter l'information en provenance de l'erreur:

$('#contact').ajaxForm({
  success: function() { $('#success').fadeIn("slow"); },
  error: function(jqXHR, textStatus, errorThrown) {
    console.log(jqXHR.status);
    console.log(jqXHR.statusText);
  }
}); 

Sortie sur jquery 1.4.3 (après les OPTIONS & POST demandes sont envoyées, à la fois avec le statut de 200):

0
(empty string)

Sortie sur jquery 1.5 (après les OPTIONS de retour avec un statut 200; POST n'est jamais envoyé)

302
error

Je suis vraiment perdu.

  • Est-il un plugin qui gère cela?
  • Ai-je raté quelque chose quelque part?

Toute aide sera grandement appréciée.

OriginalL'auteur kikito | 2011-02-21