<script>
$.ajaxSetup({contentType: 'application/json'});
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?jsonpcallback=?"+data_string,
dataType: "jsonp",
type : 'post',
processData: false,
crossDomain: true,
contentType: "application/json",
jsonp: false,
jsonpcallback: result()
});
}
function result(){
alert('back in')
alert(data)
}
function jsonp1300279694167(){
alert('dhoom')
}
</script>
Mam skrypt powyżej kwerendy w całej domenie i księgowania danych w formularzu.
Wszystko wydaje się działać dobrze. Odpowiedź JSON można zobaczyć w konsoli firebug. Chcę przetwarzać komunikaty o stanie odpowiedzi i wyświetlać odpowiednio do użytkownika. Jak powinienem to osiągnąć?Odczytywanie odpowiedzi JSON między domenami
UPDATE
Próbowałem jak sugeruje T.J. Crowder, ale nie mam jeszcze szczęścia. Zmodyfikowany kod jest poniżej
function submit_data(f){
alert('submitting')
var data_string = $(f).serialize();
$.ajax({
url: "http://localhost:3000/application/1/contact_us.json?"+data_string,
dataType: "jsonp",
crossDomain: true,
success: handleSuccess()
});
}
function handleSuccess(data) {
alert("Call completed successfully");
alert(data);
}
to nie uzyskuje dostęp data
i alarmuje undefined
. Jeśli spróbuję przekazać go od success: handleSuccess()
, spowoduje to błąd i przekierowanie z żądaniem http.
Otrzymuję odpowiedź z aplikacji Ruby on Rails
. Oto metoda jestem uderzanie
def create
errors = ContactUsForm.validate_fields(params)
logger.info errors.inspect
if errors.blank?
respond_to do |format|
format.json {render :json => {:status => 'success'}.to_json}
end
else
respond_to do |format|
format.json {render :json => {:status => 'failure', :errors => errors}.to_json}
end
end
end
Czy istnieje coś, że muszę skonfigurować w mojej aplikacji szyn
Oto przykład połączenia JSONP na żywo: http://jsbin.com/otehi4 –
Próbowałem prawie wszystkiego, ale nie mam jeszcze szczęścia. Zaktualizowano to pytanie, podjętymi staraniami: – Pravin
@Pravin: Nadal wstawiasz '()' po nazwie funkcji programu obsługi ('success: handleSuccess()'). Jak już powiedziałem w powyższej odpowiedzi, to * wywołuje * twoją funkcję 'handleSuccess' natychmiast (przed wywołaniem ajax) i przypisuje jej wartość zwracaną do opcji' success' do 'ajax'. Aby odwołać się do funkcji bez wywoływania jej, należy opuścić '()' off (np. 'Success: handleSuccess'). –