2011-07-08 2 views
0

Existe-t-il un moyen de voir si un navigateur client prend en charge les méthodes PUT ou SEARCH pour une utilisation avec JQuery & requêtes AJAX?Méthode permettant de voir si le navigateur client prend en charge les méthodes PUT/DELETE

J'ai le code suivant et PUT ne semble pas sur le côté serveur pour moi dans Chrome et Chrome ... Je voudrais savoir, si PUT est pas pris en charge par le navigateur, comment le changer à une requête POST ... pour la compatibilité ascendante

function do_data(url, action, query) { 
try { 
    if ($.browser.msie) { 
     var xdr = new XDomainRequest(); 
     if (query !== null) { 
      console.log(query); 
      xdr.open(action, url + '?' + $.param(query)); 
     } else { 
      xdr.open(action, url); 
     } 
     xdr.onload = function() { 
      var data = $.parseJSON(this.responseText); 
      show_data(data); 
     }; 
     xdr.send(); 
    } else { 
     if (query !== null) { 
      $.ajax({ 
       url: url, 
       data: query, 
       type: action, 
       success: function(data) { 
        console.log(data); 
       }, 
       error: function(jqXHR, textStatus, errorThrown) { 
        console.log(textStatus); 
       } 
      }); 
     } else { 
      console.log(query); 
      $.ajax({ 
       url: url, 
       type: action, 
       success: function(msg) { 
        console.log(data); 
       } 
      }); 
     } 
    } 
} catch (e) {} 
} 

en utilisant le code ci-dessus, si je l'utilise « P UT "sur Chromium/Chrome, error: function(jqXHR, textStatus, errorThrown) va imprimer simplement error.

Sur le serveur, je vois REQUEST_METHOD: OPTIONS et non PUT.

Juste pour confirmer, pour tous ceux qui vient à travers cette ... il n'y a pas une façon programmatique

+0

Vous pouvez toujours mettre en place un simple service "HTTP echo", qui répondrait à chaque requête avec un 200 OK retournant la requête complète (en-têtes et tout) dans le corps. – Szocske

Répondre

0

La façon courante de traiter le manque de PUT et DELETE support dans la plupart des navigateurs est d'utiliser HTTP POST tunneling. Fondamentalement, vous utilisez un POST et ajoutez le VERBE réel à un en-tête HTTP X-HTTP-Method-Override. Sur le service, vous vérifiez pour ce dernier, s'il n'est pas trouvé, utilisez la méthode HTTP normale. Pour plus d'informations, voir here pour plus d'informations.

+0

mais cela ne me permet pas de manière programmatique de voir si le navigateur client supporte PUT ou pas .... – sdolgy

+0

En utilisant cette technique, vous n'avez pas à le faire. Afaik il n'y a aucun moyen de vérifier la prise en charge de PUT et DELETE et même si vous pourriez encore avoir besoin de provisionner de cette façon. – Maurice

+0

merci ... qui m'a amené à cela: http://stackoverflow.com/questions/1813156/x-http-method-override-in-jquery – sdolgy

Questions connexes