2016-06-09 5 views
2

Ich arbeite an unendlichen Blättern auf meiner Rails-Website mit Dart als clientseitigem Code. Ich fand ein Beispiel für einen Anruf und, erstaunlicherweise, es funktionierte das erste Mal. Das Problem ist, dass es den gleichen HTML-Code zurückgibt, den ich bekommen würde, wenn ich auf die nächste Schaltfläche klicke. Ich brauche nicht die ganze Seite, nur die Scrolldaten. Ich beschloss, JSON zu versuchen. Die Anforderung wird von Rails verarbeitet, sie wird jedoch weiterhin als HTML gerendert. Dies ist die Veränderung, die ich gemacht:Rails, die JSON nicht als Antworttyp erkennen

html Anfrage

HttpRequest.request(url).then(onDataLoaded); 

json Anfrage

HttpRequest.request(url, responseType: 'json').then(onDataLoaded); 

Die Variable url hat eine Kopie der URL aus der Schaltfläche 'Weiter':

http://jazzcat.loc/artists?page=2 

Wenn ich über diesen Antworthandler auf die Browserkonsole drucke:

void onDataLoaded(HttpRequest resp) { 
    print(resp.statusText); 
    print(resp.responseHeaders); 
    print(resp.response); 
} 

Der Statustext ist OK. Die Response-Header sind:

{x-runtime: 0.049101, date: Thu, 09 Jun 2016 23:51:05 GMT, x-content-type-options: nosniff, server: Apache/2.4.18 (Unix) Phusion_Passenger/5.0.24 PHP/5.5.34, x-powered-by: Phusion Passenger 5.0.24, x-frame-options: SAMEORIGIN, content-type: text/html; charset=utf-8, status: 200 OK, cache-control: max-age=0, private, must-revalidate, transfer-encoding: chunked, etag: W/"fb290bd42f831f80ea9359040304ea39", connection: Keep-Alive, keep-alive: timeout=5, max=100, x-xss-protection: 1; mode=block, x-request-id: 9921c6c7-2fb6-43b9-89d3-636fb4a3aec0} 

Die rest.response null ist.

Ich habe die Netzwerkdaten im Chrome-Browser überprüft und die vollständigen HTML-Daten auf der Registerkarte "Antwort" angezeigt. Der Code Dart muss denken, es ist json und kann es nicht

Hier ist das Rails-Anwendungsprotokoll angezeigt wird von einer json Antworttyp Anfrage: dieser

Started GET "/artists?page=2" for 127.0.0.1 at 2016-06-10 17:05:06 -0700 
Processing by ArtistsController#index as */* 
Parameters: {"page"=>"2"} 
ArtistsController index method 
Rendered artists/_list_subnav.html.erb (0.2ms) 
Artist Load (1.3ms) SELECT `artists`.* FROM `artists` ORDER BY last_name,  first_name LIMIT 25 OFFSET 25 
(0.4ms) SELECT COUNT(*) FROM `artists` 
Rendered artists/index.html.erb within layouts/application (22.9ms) 
Completed 200 OK in 31ms (Views: 28.6ms | ActiveRecord: 1.7ms) 

Ich habe einen index.json.erb und ich habe auch versucht, das Hinzufügen zur Steuerung:

def index 
    # Perform any filtering using ransack search 
    logger.debug "ArtistsController index method format" 
    @q = Artist.search(params[:q]) 
    # Partition the output using kaminari page 
    @artists = @q.result.order('last_name', 'first_name').page(params[:page]) 
    respond_to do |format| 
    format.html 
    format.json { render :json => @artists } 
    end 
end 

Wie bekomme ich Schienen, um json zu rendern? Wie ist das Format im obigen Code festgelegt?

aktualisieren

Ich habe die Frage komplett neu geschrieben.

Antwort

2

Es dauerte zwei Tage zu graben, um es zu finden. Sie müssen der Anforderung einen Accept-Header hinzufügen. Hier ist, wie ich mein Problem oben behoben habe:

Map headers = {'Accept': 'application/json'}; 
HttpRequest.request(url, requestHeaders: headers).then(onDataLoaded);