Ajax to post and return html to display in div

jQuery v 1.9.0

When the page loads, I run two functions (get_month () and get_todays_events ()), and they return the calendar and today's html events.

Sometimes when I refresh the page, it displays the current events twice and does not display the calendar (month) as shown below.

enter image description here Half the time this works just fine like below:

enter image description here

There are no errors in the firebug console. It works fine as a standalone app, but when I include it in Jasig uPortal it gets confused.

Then I tried to strip the Html that is being sent back from the ajax messages and I noticed get_todays_events (); could be the culprit, but I still don't know what it could be.

Is there something in the html that might work, or should I delay this function after get_month (); fires?

$.noConflict();
jQuery(document).ready(function($) {

  function get_month()
  {
    var url_month = jQuery("#days_for_month_url").attr("href");

    var form_data = { ajax : '1' };

    jQuery.ajax({
      type: "POST",
      dataType: "html",
      url: url_month,
      crossDomain: true,
      data: form_data,
      success: function( default_month_msg ) {

        jQuery('#display-month').html(default_month_msg);

      } // end success

    }); // end ajax
    //return false;
  }

  function get_todays_events()
  {
    var url_todays_events = jQuery("#todays_events_url").attr("href");

    var form_data = { ajax : '1' };

    jQuery.ajax({
      type: "POST",
      dataType: "html",
      url: url_todays_events,
      crossDomain: true,
      data: form_data,
      success: function( default_month_msg ) {

        jQuery('#display_todays_events').html(default_month_msg);

      } // end success

    }); // end ajax
    //return false;
  }

  get_month();
  console.log("display calendar");

  get_todays_events();
  console.log("display today events");

  jQuery(document).on('click', "a.view_events", function(e) {
    e.preventDefault();
    var date = jQuery(this).data('date');

    // change if URL changes
    var url_events = jQuery("#events_for_day_url").attr("href");

    var form_data = {
      year : jQuery(this).data('year'),
      month : jQuery(this).data('month'),
      day : jQuery(this).data('day'),
      date : jQuery(this).data('date'),
      ajax : '1'
    };

    jQuery.ajax({
      type: 'POST',
      dataType: 'html',
      url: url_events,
      data: form_data,
      success: function( msg ) {

        jQuery('#display-events').html(msg);
        jQuery('#display-event_detail').html('');
        jQuery('#display_todays_events').html('');

      } // end success

    }); // end ajax

    return false;

  }); // end on.click view-events

  jQuery(document).on('click', "a.view_event_details", function(e) {
    e.preventDefault();
    var url_event_detail = jQuery("#event_detail_url").attr("href");

    var form_data = {
      event_id : jQuery(this).data('event_id'),
      ajax : '1'
    };

    jQuery.ajax({
      type: 'POST',
      dataType: 'html',
      url: url_event_detail,
      data: form_data,
      success: function( msg ) {

        jQuery('#display-event_detail').html(msg);
        jQuery('#display-events').html('');
        jQuery('#display_todays_events').html('');

      } // end success

    }); // end ajax

    return false;

  }); // end on.click view_event_details

  jQuery(document).on('click', "a.month_link", function(e) {
    e.preventDefault();

    jQuery('#display-events').html('');

    var url_days_for_month = jQuery("#days_for_month_url").attr("href");

    var form_data = {
      month_url : jQuery(this).data('month_url'),
      ajax : '1'
    };

    jQuery.ajax({
      type: 'POST',
      dataType: 'html',
      url: url_days_for_month,
      data: form_data,
      success: function( msg ) {

        jQuery('#display-month').html(msg);
        jQuery('#display_todays_events').html('');

      } // end success

    }); // end ajax

    return false;

  }); // end on.click view-month

  jQuery(document).on('click', "a.view_subscriptions", function(e) {
    e.preventDefault();
    var url_subscription = jQuery("#subscriptions_url").attr("href");

    var form_data = {
      ajax : '1'
    };

    jQuery.ajax({
      type: 'POST',
      dataType: 'html',
      url: url_subscription,
      data: form_data,
      success: function( msg ) {

        jQuery('#display-subscriptions').html(msg);
        //jQuery('#display-subscriptions').toggle();

      } // end success

    }); // end ajax

    return false;

  }); // end on.click view-subscriptions

  jQuery(document).on('click', "#update_subscriptions", function(e) {
    e.preventDefault();
    var url_update_subscription = jQuery("#update_subscriptions_url").attr("href");

    var vals = []
    jQuery('input:checkbox[name="calendar[]"]').each(function() {
        if (this.checked) {
            vals.push(this.value);
        }
    });

    var form_data = {
      ajax : '1',
      calendar: vals,
    };

    jQuery.ajax({
      type: 'POST',
      dataType: 'html',
      url: url_update_subscription,
      data: form_data,
      success: function( msg ) {

        get_month();
        jQuery('#display-subscriptions-update').html(msg).fadeOut(6000);
        jQuery('#display-subscriptions').html('');
        jQuery('#display-events').html('');
        jQuery('#display_todays_events').html('');

      } // end success

    }); // end ajax

    return false;

  }); // end on.click view-subscriptions

}); // end document ready

      

Here is the html that is returned on success for the get_todays_events () function

<h3>Today Events</h3>


  <p><a href="#" class="view_event_details" data-event_id="68">All About Heroin</a> - 12:30 pm</p>


  <p><a href="#" class="view_event_details" data-event_id="67">African Storyteller - Ekow King</a> - 12:30 pm</p>


  <p><a href="#" class="view_event_details" data-event_id="66">Men&rsquo;s Basketball vs. Columbia-Greene Community College</a> - 6:00 pm</p>

      

UPDATE: Checked the net tab in firebug and looked at XHR, when used in uPortal it would fire two post requests and two get requests. Both POST requests were reconfiguring 0 bytes, but the GET requests were returning something. I changed them to GETS since I didn't really ask the user to enter data, but clicked on a link that already had data in it (it was the date they needed view events) so I added the date value to the url I was passing the ajax request get, then it returned it correctly every time.

+3


source to share


1 answer


Try adding to the ajax call parameters async = false (add this to all ajax calls).

For example:



 jQuery.ajax({
  type: "POST",
  dataType: "html",
  url: url_todays_events,
  crossDomain: true,
  data: form_data,
  async:false,
  success: function( default_month_msg ) {

    jQuery('#display_todays_events').html(default_month_msg);

  } // end success

});

      

-1


source







All Articles