多个Ajax调用覆盖值而不使用jquery

时间:2017-05-09 15:33:15

标签: javascript ajax

我无法一起调用多个ajax调用。我在页面加载时调用了三个 // Prevent dropdown menu from closing on clicks inside it var dropdown = $('.dropdown-toggle').parent(); dropdown.on('show.bs.dropdown', function() { dropdown.data('closeable', true); }).on('click', function(event) { if ($(event.target).closest('.dropdown-toggle').length) { dropdown.data('closeable', true); } else { dropdown.data('closeable', false); } }).on('hide.bs.dropdown', function(event) { var closeable = dropdown.data('closeable'); dropdown.data('closeable', true); return closeable; }); $('.selection').each(function() { var $this = $(this); var dropdownCount = $('.dropdown-toggle').find('.' + $this.data('id') + '-count') var count = $this.data('count') $this.find('.minus').on('click', function(event) { if (count === 0) { //do nothing return; } else { count--; $this.data('count', count); dropdownCount.text(count); $this.find('.count').text(count); } }); $this.find('.plus').on('click', function(event) { count++; $this.data('count', count); dropdownCount.text(count); $this.find('.count').text(count); }); }); /*--------------END--------------*/ $(document).ready(function() { moment.locale('en', { week: { dow: 1 } // Monday is the first day of the week }); //Initialize the datePicker(I have taken format as mm-dd-yyyy, you can //have your owh) $("#weeklyDatePicker").datetimepicker({ format: 'DD-MM-YYYY' }); //Get the value of Start and End of Week $('#weeklyDatePicker').on('dp.change', function(e) { var value = $("#weeklyDatePicker").val(); var firstDate = moment(value, "DD-MM-YYYY").day(1).format("DD-MM- YYYY"); $("#weeklyDatePicker").val(firstDate); }); }); 函数,通过使用getXValues更改圆顶值来设置三组值。

在这种情况下,只有一个函数在所有三个字段中执行并设置相同的值。

如果我在之前的setXValues值中调用每个后续函数,那么一切正常,这会导致前一个函数必须通过调用setXValues来完成。

setXValues

如果您能提供解决我问题的方法,那将会很有帮助。

注意:请注意我不能使用JQuery,因为它不属于ui组件(我讨厌它但没有选择..)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的问题是this的范围和背景之一。在你的功能中:

var ajaxRequestForChange = function(url,fun) {
    var strURL = url;
    var xmlHttpRequest = false;
    var self = this;
...

您指定var self = this;但是函数ajaxRequestForChange始终在全局范围内运行。所以稍后你做的时候:

if (window.XMLHttpRequest) {
    self.xmlHttpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    self.xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpRequest.open("POST", strURL, true);
...

每次调用self时都使用相同的obj ajaxRequestForChange,并且每次都覆盖属性xmlHttpRequest。从所有使用它的行中删除var self = this;并删除self.,这样可以解决您的问题。所以上面变成了:

var ajaxRequestForChange = function(url,fun) {
    var strURL = url;
    var xmlHttpRequest = false;
...

if (window.XMLHttpRequest) {
    xmlHttpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttpRequest.open("POST", strURL, true);
...