Problem z AJAXem z użyciem jQuery

Witajcie,
O to mój kod app.js :
http://pastie.org/366057
A oto mój problem ;):
Linki wyglądają następująco:

<a class="get" href="http://localhost:3333/fav/Movie/6">Dodaj do ulubionych</a>

Wykonują one zapytanie w tle, i otrzymują od railsów odpowiedź w formacie text/javascript (czyli dobrze ;)). Przykładowa odpowiedź to:

alert("test")

, niestety kod ten nie jest wykonywany, tzn. nie dostaje żadnego alerta.

Jak muszę poprawić funkcje które mam w app.js tak by zwracany kod był wykonywany? Szukałem w api jQuery, ale nie pomaga :frowning: ( http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype ).

Z góry dziękuje,
Pozdrawiam.

poczytaj o Js’owej funkcji eval. choć nie wiem czemu/po co tak robisz. nie lepiej zwrócić sobie z railsów

test

a w JS zrobić

alert(foo);

gdzie foo to to, co jest zwracane przez railsy?

to z alertem to tylko przykład,
będe zwracał coś typu:

$("#comment_form").fadeIn("slow") $("#comments").replaceWith("TEST")
etc.
krzyzak: a z evalem to jak to zrobić?

    $.get(link.attr('href'), function(data){ eval(data);});

działa, ale mam dziwne wrażenie że tak nie powinno być?

Tak to jest jak się niedokładnie czyta http://docs.jquery.com. Masz tu poniżej działający przykład z użyciem metody, jaką polecałem w swojej książce. Masz duże zdolności do niepotrzebnego komplikowania kodu. :slight_smile: Żadne eval’e nie są potrzebne. Renderowanie JS z możliwością wstawiania Ruby załatwiają szablony JS.ERB.

[code]# app/controllers/hello_controller.rb
class HelloController < ApplicationController
def index
@title = “Próba AJAX’a”
@msg = “Hello World!”
end
end

views/hello/index.html.erb

Kliknij tutaj a wyskoczy okienko z napisem <%= h @msg %>

views/hello/index.js.erb

alert(’<%= j @msg %>!’)

views/layouts/application.html.erb

<%= h @title %> <%= javascript_include_tag 'jquery', 'application' %>

<%= h @title %>

<%= yield :layout %>

public/javascripts/application.js:

$(document).ready(function() {
$(“p a”).click(function () {
$.ajax({type: “GET”, url: “/hello”, dataType: “script”});
});
});[/code]

jzabiello: właśnie tak robiłem, dzięki :slight_smile:
Sprawę załatwiło to ;):

$.ajaxSetup({ dataType: "script", complete: function(response, status){ $('#loading_indicator').hide() }, error: function(){ alert('An error occured!') }, beforeSend: function(request, params){ $('#loading_indicator').show() }, });

[quote=swistaczek]to z alertem to tylko przykład,
będe zwracał coś typu:

$("#comment_form").fadeIn("slow") $("#comments").replaceWith("TEST")
etc.
krzyzak: a z evalem to jak to zrobić?[/quote]
Nie lepiej wywolac ten kod w callbacku zamiast zwracac go w response body?

[quote=s0lnic][quote=swistaczek]to z alertem to tylko przykład,
będe zwracał coś typu:

$("#comment_form").fadeIn("slow") $("#comments").replaceWith("TEST")
etc.
krzyzak: a z evalem to jak to zrobić?[/quote]
Nie lepiej wywolac ten kod w callbacku zamiast zwracac go w response body?[/quote]
Mógłbyś podać przkład?

Po co ma Ci podawać przykład? Przyjrzyj się w dokumentacji link_to_remote opcjom wspólnym dla wszystkich ajaxowych helperów, konkretnie może Cię zainteresować :complete :wink: