2009-11-16 3 views
15

J'utilise simplement jQueryjQuery: Je reçois OPTIONS demande au lieu de GET

$.get(....); 

ici au lieu d'obtenir une réponse GET je reçois OPTIONS (cochée dans Firebug Net)

Même code fonctionne bien dans. Safari. On dirait un problème avec Firefox.

Toute solution de contournement/solutions pour résoudre ce problème ..

Merci

Kurund

+1

est l'URL que vous faites la demande sur le même domaine que votre page, ou est cette croix -domaine? –

+0

C'est ... incroyablement étrange.Que diriez-vous d'un cas de test minimal, nous avons donc l'espoir de comprendre ce qui se passe? – outis

+1

L'URL appelée est inter-domaine. –

Répondre

1

Cela est probablement dû à des restrictions JavaScript faisant XMLHttpRequests inter-domaines. Ceci n'est généralement pas autorisé pour des raisons de sécurité. Voir la question référencée ci-dessus, ou un similar question I asked.

Pour résoudre ce problème:

Espérons que ça aide!

26

La OPTIONS demande ce que vous voyez est la demande prévol, vous pouvez lire à ce sujet ici:

Il est là parce que vous demandez un XMLHttpRequest interdomaine afin que le navigateur vérifie si votre requête est autorisée sur le serveur distant ou non t.

Il existe deux solutions pour résoudre le problème (comme mentionné ci-dessus):

  • mettre en œuvre la réponse à la demande OPTIONS avec les Access-Control-* têtes correspondants
  • utilisent une demande JSONP au lieu de JSON simple,
+0

Cela semble être mon cas. Mais comment pourrais-je implémenter la réponse pour la requête OPTION? Où dois-je l'implémenter? Mon WebMethod n'est même pas appelé. Dois-je remplacer quelque chose? – Nawaz

+0

@Nawaz: Je ne suis pas familier avec .NET mais peut-être cet article pourrait vous aider: http://encosia.com/using-cors-to-access-asp-net-services-across-domains/ –

+5

Je dois dire que le comportement inter-domaine des navigateurs «modernes» devient ridicule. Si vous avez un serveur comme couchdb qui envoie Access-Control-Allow-Origin: * mais n'implémente pas OPTIONS, vous ne pouvez pas faire un simple AJAX GET parce que le navigateur décide de 'vérifier' d'abord et de tout casser. Le développeur sait que le GET fonctionnera mais le navigateur ne les croit pas! – Marc

1

J'ai eu le même problème, la cause que je pensais était dans le html <head> section que j'avais mis l'élément de base à ce

<base href="http://local.develepment.url" /> 

qui j'ai changé pour

<base href="http://<?php echo $_SERVER['HTTP_HOST']?>/" /> 
Questions connexes