2014-07-06 4 views
8

Sto lavorando a una pianificazione utilizzando FullCalendar e ho riscontrato un po 'di difficoltà. Sto cercando di utilizzare le funzioni di callback dell'evento per creare un nuovo evento e inviare le informazioni del nuovo evento al mio script php che quindi memorizza le informazioni sul server. Ma ogni volta che provo a chiamare $ .ajax o $ .post dall'interno di uno dei callback (e ho provato se da con in alcuni di loro) ottengo questo:Chiamare JQuery.ajax o JQuery.post dall'interno di uno dei callback dell'evento genera un errore di tipo da Moment.min.js

Uncaught TypeError: Cannot read property 'month' of undefined moment.js:684 
extend.monthsShort moment.js:684 
e jquery.min.js:4 
Bc jquery.min.js:4 
Bc jquery.min.js:4 
Bc jquery.min.js:4 
n.param jquery.min.js:4 
n.extend.ajax jquery.min.js:4 
$.fullCalendar.select advisorSchedule.js:141 
Q fullcalendar.min.js:6 
s fullcalendar.min.js:7 
a fullcalendar.min.js:7 
(anonymous function) fullcalendar.min.js:6 
d jquery.min.js:3 
n.event.dispatch jquery.min.js:3 
r.handle 

Ma perché stavo usando Moment .min.js era piuttosto difficile da leggere da dove provenisse il problema, quindi sostituisco Moment.min.js con Moment.js, e quando l'errore è saltato di nuovo sono stato in grado di leggere dov'era il problema:

months : function (m) { 
    return this._months[m.month()]; 
}, 

Da quanto ho raccolto, m non è definito dal momento in cui questa funzione viene eseguita. Ecco il codice che ho usato per inviare i nuovi dati di evento allo script php:

select:function(start, end, jsEvent, view){ 
     CURRENT_SELECTION_START = start; 
     CURRENT_SELECTION_END = end; 

     console.log(CURRENT_SELECTION_START + '-' + CURRENT_SELECTION_END); 

     $.ajax({ 

      url:'../AJAX/save_event.php', 
      type: 'POST', 
      data: { 
       Start_Time: start, 
       Event_Title: prompt('Title'), 
       End_Time: end 
      }, 

     }); 
    }, 

risposta

12

presumo inizio è un momento-oggetto.

Ho avuto lo stesso problema e sembra: non è possibile inviare l'oggetto momento, quindi è necessario ottenere il valore come numero intero o qualcos'altro.

Provare start.calendar() o start.format("YYYY-MM-DD"); (o qualcosa di simile) anziché start.

lavorato per me, si spera anche per te;)

Patrick

6

Non inviare start e end direttamente come i parametri per la richiesta AJAX.

var startDate = start.format('YYYY-MM-DD'), 
    endDate = end.format('YYYY-MM-DD'), 
    params = {'from':startDate, 'to':endDate}; 
$.ajax({ 
     url: 'http://example.com', 
     contentType: 'application/json', 
     data: params, 
     type: 'POST' 
    }).done(function(data) { 
     console.log('Successful! ', data); 
    }); 
6

Ho appena avuto lo stesso identico problema (è come mi sono imbattuto in questo post).

Per inviare l'intero oggetto è necessario stringerlo.

var now = moment(); 

$.ajax({ 
     url: 'http://example.com', 
     contentType: 'application/json', 
     data: JSON.stringify(now), 
     type: 'POST' 
}); 
Problemi correlati