2013-08-03 3 views
8

Я пытаюсь получить функцию успеха от вызова AJAX к огню. Я знаю, что он работает правильно, потому что я нахожу свой собственный API, и я вижу, что он правильно нажимает на URL-адрес, и сервер выводит HTTP 200.Функция успеха AJAX не называется

Я понял, что это потому, что сервер выводит json, поэтому я попробовал для учета этого в вызове 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"); 
    } 
}); 

метод апи

class UsersController < ApplicationController 
    respond_to :json 

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

end 

логи сервера

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

Возможный дубликат [Что делает «WARN Не удалось определить длину содержимого тела ответа». и как мне избавиться от него?] (http://stackoverflow.com/questions/7082364/what-does-warn-could-not-determine-content-length-of-response-body-mean-and- h) – Raptor

+0

Я не думаю, что это связано с вызовом AJAX. В ответе говорится, что предупреждение безопасно игнорировать. – user2495030

+1

Знаете ли вы, что означает '' dataType' (http://api.jquery.com/jQuery.ajax/)? Вы пытались добавить обратный вызов 'error'? –

ответ

3

Я бы добавить полную функцию и проверить статус текста. Это должно дать информацию, необходимую для решения проблемы.

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

Это случилось со мной также долго назад, я решил эту проблему путем изменения DATATYPE к тексту, так и вручную преобразования, что объект JSON через 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"); 
    } 
}); 

Это может сработать для вас.

+9

Использовать JSON.parse (отклик); вместо. – Jackson

2

Я думаю, что проблема в том, что я испытывал, и я думаю, что у меня есть ответ. Похоже, что ваш вызов извлекает HTML-представление, так как я выхожу из «Rendered main/index.html.erb в макетах/приложении», хотя я не знаком с тем, какой стек API вы используете.

Мои симптомы на ASP.NET MVC 5 были вызваны полным, но ни одна ошибка, успех или таймаут не вызывались. В объекте ответа статус равен 200, а statusText - «ОК», но параметр textStatus был «parsererror».

Ответ responseText - это html, который я ожидал, но я забыл, что перешел от получения json к html, поэтому после изменения типа данных: 'json' для datatype: 'html', теперь он работает.

0

Это не по-видимому, вызов метода, который вы ожидаете, учитывая этот класс:

class UsersController < ApplicationController 

Мы должны увидеть что-то подобное в журналах:

Processing by UsersController#show as JSON 

Но ваши журналы показывают это:

Processing by MainController#index as JSON 

Я предполагаю, что ваши маршруты неправильные. Проверьте маршруты и почему он не вызывает метод UsersController#show. Также, чтобы быть уверенным, с браузером (chrome, firefox), вы должны быть в состоянии проверить ответ запроса, чтобы убедиться, что он действительно получает json или html.

Поскольку он пытается визуализировать main.html.erb. Я не удивлен, что dataType: "json" не работает. Но он должен работать, если вы действительно возвращаете действительный json. Но ваши рельсовые журналы показывают нам, что вы, вероятно, возвращаете html.

Смежные вопросы