167 messaggi dal 08 dicembre 2003
Buongiorno a tutti, sto cercando invano di far funzionare FullCalendar.
Il mio problema è relativo alla lettura degli eventi da visualizzare utilizzando JSON e Web Service.
Riporto di seguito uno stralcio del codice per capire dove faccio cazz...
Grazie a tutti.

Questo è il codice che chiama il Web Service

events: {
url: '../WSFullCalendar.asmx/LeggiBooking',
method: 'post',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
failure: function (xhr, status, error) {
alert('Errore nella lettura del WebMethod! - ' + xhr.responseText + " - " + status);
},
success: function(Risposta) {
alert('Funziona...' + Risposta.d);
}
}

Questo è il Web Service
<%@ WebService Language="VB" Class="WSFullCalendar" %>

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Script.Serialization

<System.Web.Script.Services.ScriptService()>
<WebService(Namespace:="http://tempuri.org/")>
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
Public Class WSFullCalendar
Inherits System.Web.Services.WebService

<WebMethod()>
Public Function LeggiBooking() As String
Dim Eventi(2) As Object
Eventi(0) = New With {Key .title = "Evento 1 del 10-06-2019", .color = "red", .textcolor = "white", .start = "2019-06-10", .end = "2019-06-10"}
Eventi(1) = New With {Key .title = "Evento 2 del 12-06-2019", .color = "red", .textcolor = "white", .start = "2019-06-12", .end = "2019-06-12"}
Eventi(2) = New With {Key .title = "Evento 3 del 14-06-2019", .color = "red", .textcolor = "white", .start = "2019-06-14", .end = "2019-06-14"}

Dim StrJson As New JavaScriptSerializer()
Return StrJson.Serialize(Eventi)
End Function

End Class
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
non ho familiarità con questo modo di fornire gli eventi.
events: {
url: '../WSFullCalendar.asmx/LeggiBooking',
method: 'post',
dataType: 'json',
...

Presumo comunque che il FullCalendar non gradisca la risposta del server, che gli restituisce l'array di eventi annidato nella proprietà d.

Secondo me dovresti provare invece questa tecnica:
https://fullcalendar.io/docs/events-function
Non guardare il primo esempio, guarda il secondo che trovi nella pagina.

In pratica, la funzione javascript che assegni ad events ti verrà invocata ogni volta che il calendario deve recuperare degli eventi. Eccola:
 events: function(fetchInfo, successCallback, failureCallback) {
        // ...
      },


Il primo parametro, fetchInfo, contiene tutte le informazioni necessarie, tipo l'intervallo temporale. Tu usa queste informazioni per comporre la tua richiesta al webservice. Puoi inviare la richiesta usando jQuery, fetch API o altra tecnica. Quando ti torna la risposta dal server, invoca la funzione che ti viene passata con il parametro successCallback e passagli l'array di eventi, che deve essere fatto in questo modo.
https://fullcalendar.io/docs/event-parsing

ciao,
Moreno

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Ciao Moreno, in primis grazie! Sei sempre presente.
Ho provato così, giusto per capire se il meccanismo è giusto, ma purtroppo non va.
Indipendentemente dal Web Service non riesco a far visualizzare gli eventi.


events: function (start, end, timezone, callback) {
$.ajax({
type: "POST",
url: "../WSFullCalendar.asmx/LeggiBooking",
contentType: "application/json",
success: function (data) {
var events = [];
var obj = jQuery.parseJSON(data.d);
console.log(obj);
$(obj).each(function () {
events.push({
title: 'Evento 1 del 10-06-2019',
start: '2019-06-10',
end: '2019-06-11',
color: '#BEEABE',
textColor: 'black'
});
});
callback(events);
},
error: function (xhr, status, error) {
alert(xhr.responseText + "Errore lettura eventi...");
}
});
},

Questa invece, magari mi serve dopo, è la risposta di Fiddler:

d=[{"title":"Evento 1 del 10-06-2019","color":"red","textcolor":"white","start":"2019-06-10","end":"2019-06-10"},{"title":"Evento 2 del 12-06-2019","color":"red","textcolor":"white","start":"2019-06-12","end":"2019-06-12"},{"title":"Evento 3 del 14-06-2019","color":"red","textcolor":"white","start":"2019-06-14","end":"2019-06-14"}]
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, prego!
Credo che questo non serva.

var obj = jQuery.parseJSON(data.d);


Infatti, data.d dovrebbe già essere un array di oggetti javascript. Non c'è bisogno di deserializzarlo ulteriormente dal json.

Per prova, logga subito quello che ottieni dal server.
success: function (data) {
  console.log("Ho ricevuto questo:", data); //Prova anche con data.d


Cosa viene loggato in console?

ciao,
Moreno
Modificato da BrightSoul il 23 giugno 2019 18:15 -

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Questa è la risposta con data.d

Ho ricevuto questo: [{"title":"Evento 1 del 10-06-2019","color":"red","textcolor":"white","start":"2019-06-10","end":"2019-06-10"},{"title":"Evento 2 del 12-06-2019","color":"red","textcolor":"white","start":"2019-06-12","end":"2019-06-12"},{"title":"Evento 3 del 14-06-2019","color":"red","textcolor":"white","start":"2019-06-14","end":"2019-06-14"}]

Questo invece con data

Ho ricevuto questo: {d: "[{"title":"Evento 1 del 10-06-2019","color":"red",&#8230;"white","start":"2019-06-14","end":"2019-06-14"}]"}
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
direi che data.d va bene, hai anche rispettato i nomi voluti da FullCalendar. Facendo semplicemente così non funziona?
callback(data.d);

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Ciao e buona domenica... ho fatto dei piccoli passi avanti ma continua a non funzionare.
L'errore che non riesco a risolvere è callback is not a function:
_________________________________________________________________
Questi sono i messaggi da console

Ho ricevuto questo: {d: "[{"title":"Evento 1 del 10-06-2019","color":"red",&#8230;"white","start":"2019-06-14","end":"2019-06-14"}]"}
Booking.aspx:93 Questi sono gli eventi per la callback: [{"title":"Evento 1 del 10-06-2019","color":"red","textcolor":"white","start":"2019-06-10","end":"2019-06-10"},{"title":"Evento 2 del 12-06-2019","color":"red","textcolor":"white","start":"2019-06-12","end":"2019-06-12"},{"title":"Evento 3 del 14-06-2019","color":"red","textcolor":"white","start":"2019-06-14","end":"2019-06-14"}]
Booking.aspx:94 Uncaught TypeError: callback is not a function
at Object.success (Booking.aspx:94)
at l (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at T (jquery.min.js:2)
at XMLHttpRequest.r (jquery.min.js:2)
______________________________________________________________
Questo è il codice della pagina aspx

<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl,
{
plugins: ['interaction', 'dayGrid', 'timeGrid'],
header:
{
left: 'prev, next, today',
center: 'title',
right: 'dayGridMonth, dayGridWeek, dayGridDay, timeGridDay'
},
locale: 'it',
defaultDate: new Date(),
eventLimit: true,
height: 470,

events: function (start, end, timezone, callback) {
$.ajax({
type: "POST",
url: "../WSFullCalendar.asmx/LeggiBooking",
contentType: "application/json; charset=utf-8",
cache: false,
success: function (datijson) {
console.log("Ho ricevuto questo: ", datijson);
console.log("Questi sono gli eventi per la callback: " + datijson.d);
callback(datijson.d);
}
});
//weekends: true,
}
});
calendar.render();
});
</script>

Ho provato in mille modi ma evidentemente mi sfugge qualcosa... confido in te :-)
Grazie.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
ti ho linkato la documentazione della versione 3 ma probabilmente tu invece stai usando la versione 4 di FullCalendar.

La firma della funzione è cambiata. Ecco quella della versione 4.
https://fullcalendar.io/docs/events-function


Quindi, anziché fare:
events: function (start, end, timezone, callback) {

Fai:
events: function(fetchInfo, callback, failCallback) {


ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.