2013-08-03 20 views
8

Sto cercando di attivare la funzione di successo da una chiamata AJAX. So che funziona correttamente perché sto colpendo la mia API e posso vedere che sta colpendo correttamente l'URL e il server sta emettendo un HTTP 200.La funzione di successo AJAX non viene chiamata

Ho pensato che fosse perché il server sta emettendo JSON, così ho provato per tener conto di ciò nella chiamata AJAX, ma comunque la funzione di successo non funzionerà. Qui è il mio codice

ajax

$.ajax('http://localhost:3000/api/users/show/:id', { 
    type: 'GET', 
    dataType: 'json', 
    contentType: "application/json", 
    data: { 
    id: 1 
    }, 
    success: function(response) { 
    return alert("Hey"); 
    } 
}); 

metodo API

class UsersController < ApplicationController 
    respond_to :json 

    def show 
     respond_with User.find(params[:id]) 
    end 

end 

log del server

Started GET "/api/users/show/:id?id=1" for 127.0.0.1 at 2013-08-02 20:36:42 -0700 
Processing by MainController#index as JSON 
    Parameters: {"id"=>"1", "path"=>"api/users/show/:id", "main"=>{}} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]] 
    Rendered main/index.html.erb within layouts/application (0.6ms) 
Completed 200 OK in 146ms (Views: 144.3ms | ActiveRecord: 0.5ms) 
[2013-08-02 20:36:42] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true 
+1

possibile duplicato di [Che cosa "WARN Impossibile determinare la lunghezza del contenuto del corpo della risposta". significa e come posso liberarmene?] (http://stackoverflow.com/questions/7082364/what-does-warn-could-not-determine-content-length-of-response-body-mean-and- h) – Raptor

+0

Non penso che abbia a che fare con una chiamata AJAX. La risposta dice che l'avvertimento è sicuro da ignorare. – user2495030

+1

Sai cosa ['dataType'] (http://api.jquery.com/jQuery.ajax/) significa davvero? Hai provato ad aggiungere un callback 'error'? –

risposta

3

lo farei aggiungi una funzione completa e controlla lo stato del testo. Questo dovrebbe fornire le informazioni necessarie per risolvere il problema.

complete: function(response, textStatus) { 
    return alert("Hey: " + textStatus); 
    } 
20

Questo è accaduto con me anche una lunga schiena, ho risolto questo cambiando il dataType in testo, e manualmente la conversione che per oggetto JSON attraverso eval.

$.ajax('http://localhost:3000/api/users/show/:id', { 
    type: 'GET', 
    dataType: 'text', 
    contentType: "application/json", 
    data: { 
    id: 1 
    }, 
    success: function(response) { 
    response = eval(response); 
    return alert("Hey"); 
    } 
}); 

Possa questo lavoro per voi.

+9

Usa JSON.parse (risposta); anziché. – Jackson

2

Penso che il problema sia quello che ho vissuto e penso di avere la risposta. Sembra che la tua chiamata stia recuperando una vista HTML, poiché deduco da "Rendering principale/index.html.erb all'interno di layout/applicazione", anche se non ho familiarità con lo stack di API che stai utilizzando.

I miei sintomi su ASP.NET MVC 5 erano chiamati completi, ma nessuno di errore, successo o timeout è stato chiamato. Sull'oggetto risposta, lo stato era 200 e statusText era "OK", ma il parametro textStatus era "parsererror".

Il responseText è l'html che mi aspettavo, ma avevo dimenticato che mi ero spostato dal recupero di json in html, quindi dopo aver cambiato il tipo di dati: 'json' in datatype: 'html', ora funziona.

0

Non è apparentemente chiamando il metodo che vi aspettate, considerando questa classe:

class UsersController < ApplicationController 

Dovremmo vedere qualcosa di simile nei log:

Processing by UsersController#show as JSON 

Ma il vostro log stanno mostrando questo:

Processing by MainController#index as JSON 

la mia ipotesi è che i percorsi sono sbagliate. Controlla i percorsi e perché non chiama il metodo UsersController#show. Inoltre, per essere certi, con il browser (chrome, firefox), dovresti essere in grado di ispezionare la risposta della richiesta per assicurarti che stia effettivamente ricevendo json o html.

Poiché sta tentando di eseguire il rendering main.html.erb. Non sono sorpreso che il dataType: "json" non funzioni. Ma dovrebbe funzionare se in effetti stai restituendo un json valido. Ma i log delle tue guide ci mostrano che probabilmente stai restituendo il codice HTML.

Problemi correlati