2010-01-28 3 views
1

Je reçois une erreur 406 non acceptable lors de la soumission de mon formulaire avec jQuery. J'ai essayé la solution commune trouvée sur le Web:Rails et jQuery produisant une erreur 406

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

Cela n'a pas résolu le problème. request.format renvoie le texte/html. Je me suis creusé la tête toute la journée pour essayer de régler ça. Rails 2.3.4, jQuery 1.3.2 et jQTouch.

Voici mon code jquery:

jQuery(function() { 
    $("#search").submit(function (e) { 
    var $form = $(this); 
    return app.search($form); 
    }); 
}); 

var app = { 
    search:function ($form) { 
    $.ajax({ 

     type:$form.attr("method"), url:$form.attr("action"), 
     dataType:"script", data:$form.serialize(), 
     complete:function (req) { 
     if (req.status === 200 || req.status === 304) { 
     } else { 
      alert("There was an error searching. Try again."); 
      console.log(this); 
     } 
     } 
    });  
    return false; 
    } 
}; 

La forme:

%form{:action => "/search", :method => "post", :id => "search", "accept-charset" => "utf-8"} 
    %div{:style =>"margin:0;padding:0;display:inline" } 
     %input{:name => "_method", :type => "hidden", :value => "put"} 
     %input{:name => "authenticity_token", :type => "hidden", :value => "#{form_authenticity_token}"} 
    %ul.rounded 
     %li 
     %input{:name => 'query', :value => '', :type => 'text', :placeholder => "Search"} 

Le code du contrôleur:

def show 
    query = params[:query] 
    @results = Person.search(query) 
    respond_to do |wants| 
     wants.html { } 
     wants.js 
    end 
    end 

L'action de spectacle est celui qui est appelé. J'ai vérifié que, voici le journal

Processing PeopleController#show (for 127.0.0.1 at 2010-01-28 14:12:19) [PUT] 
    Parameters: {"authenticity_token"=>"y4kC2CZ1dnrV7LWEC2mRxv8mP499C+0HXbRVlDEuWDc=", "query"=>"purcell"} 
    SQL (1.3ms) SELECT trigger_name 
FROM all_triggers 
WHERE owner = 'PDSADMIN' 
AND trigger_name = 'PERSON_PKT' 
AND table_owner = 'PDSADMIN' 
AND table_name = 'PERSON' 
AND status = 'ENABLED' 

    Person Columns (20.9ms) select column_name as name, data_type as sql_type, data_default, nullable, 
decode(data_type, 'NUMBER', data_precision, 
'FLOAT', data_precision, 
'VARCHAR2', decode(char_used, 'C', char_length, data_length), 
'CHAR', decode(char_used, 'C', char_length, data_length), 
null) as limit, 
decode(data_type, 'NUMBER', data_scale, null) as scale 
from all_tab_columns 
where owner = 'PDSADMIN' 
and table_name = 'PERSON' 
order by column_id 

    Person Load (3.7ms) SELECT * FROM person WHERE (person.person_id IN (5554,55,5966,146)) 
Completed in 77ms (View: 20, DB: 26) | 406 Not Acceptable [http://localhost/search] 

Répondre

0

La manière correcte serait de modifier (ou ajouter) config/initializers/mime_types.rb à accepter :iphone demandes.

Mime::Type.register_alias "text/javascript", :iphone 
1

Ok, j'ai trouvé mon problème. J'utilisais le plugin jqtouch pour les rails qui assignait automatiquement un format: iphone aux requêtes en mode développement, ce qui forçait le format .iphone que je n'avais pas. J'ai utilisé ce code pour passer outre que:

if request.xhr? && request.format == :iphone 
    request.format = :js 
end 
Questions connexes