简体   繁体   中英

How to render .js.erb template and return JSON data

I have some javascript that calls a URL mysite.com/articles.js which sends a request to the articles controller's index action. I need to return data to the javascript function in JSON format but before that, I want to update some partials on the page by rendering index.js.erb

I'm calling the URL via jquery

var url = '/articles.js

$.get(url, function(newItemData) {
  someOtherFunction(newItemData)
}

Is calling the URL w/ a .js ending not the same as sending an AJAX request (remote => true) ?? I have some other buttons and links that send ajax requests via remote => true and the .js.erb template is rendered automatically with that request. Is there a way to call the URL as an ajax request?

Any help would be much appreciated.

Thanks!

Correct me if I'm wrong, but it looks like you're trying to render two views from your controller: the index.js.erb file and a JSON response. That is not possible, as Rails only supports one render , redirect_to or head call.

That means you'll need to change your JavaScript code to send two requests: one to update the view (render index.js.erb ) and another to return your JSON object.

Submitting a request to a .js ending URL is not the same as submitting an AJAX request. For that you'll need to set remote: true , as you mentioned, or build an AJAX request in you JavaScript code ( $.ajax() , if you're using jQuery).

You may also consider taking a look at Layouts and Rendering in Rails .

Hope that helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM