2013-09-20 6 views
0

Я пытаюсь сделать вызов Ajax, используя goog.net.XhrIo из библиотеки Closure. Я хочу отправить несколько параметров в запрос «Пост» и сделать их доступными для приложения Rails. Вот мой Ajax вызов:goog.net.XhrIo and Rails

goog.require('goog.net.XhrIo'); 
goog.require("goog.structs.Map"); 
goog.require("goog.Uri.QueryData"); 

function doRequest() { 

    var request = new goog.net.XhrIo(); 

    var qd = goog.Uri.QueryData.createFromMap(new goog.structs.Map({ 
     title: "Test ajax data", 
     content: "foo", 
     param1: 70 
    })); 

    goog.events.listen(request, goog.net.EventType.COMPLETE, function(){ 
     console.log("Success!"); 
    }); 
    request.send('http://localhost:3000/some_method', 'POST', qd.toString()); 

} 

Тогда в Rails:

def some_method 
    @my_variable = ModelName.find(params[????]) 
end 

Проблема заключается в том, я не знаю, как получить доступ к параметрам в приложении Rails. Я даже не уверен, что делаю запрос Post, так что параметры легко доступны.

ответ

0

Я не уверен, что это лучший способ сделать это, но это закончилось тем, что работало.

JavaScript:

goog.require('goog.net.XhrIo'); 
var updateQuizStats = function(result) { 
    var request = new goog.net.XhrIo(); 
    goog.events.listen(request, goog.net.EventType.COMPLETE, function(){ 
     console.log("YES! YES! YES!"); 
    }); 
    request.send('http://localhost:3000/some_method/'+param1+'/'+param2); 
} 

Rails routes.rb:

match '/some_method/:param1/:param2', :to => 'controller_name#some_method' 

В контроллере:

def some_method 
    @my_variable = ModelName.find(params[:param1]) 
    @my_variable.update_attributes(:some_attribute => params[:param2]) 
end 

Хотелось бы услышать, если есть лучший способ сделать это.

+0

Используйте listenOnce вместо прослушивания. – lennel