2016-12-06 6 views
0

У меня есть модуль в другом файле, который должен выполнять мои запросы ajax для меня (это в ajaxCall.js), я пытаюсь добавить этот модуль в глобальное окно объект так, что я могу использовать его в другом файле с именем (корзинка-page.js), но я получаю сообщение об ошибке с указаниемКак я могу исправить свой шаблон модуля для работы

Uncaught TypeError: Cannot read property 'process' of undefined(…)

AjaxCall.js

"user strict"; 
window.ajaxCall = window.ajaxCall || {} 
var ajaxCall = (function() { 
var api = { 
    process: function (destinationUrl, dataToPost, callbackFunction) { 
     $.ajax({ 
      url: destinationUrl, 
      data: dataToPost, 
      method: "POST", 
      dataType: "JSON", 
      success: function (data) { 
       if (element.length > 0) { 
        callbackFunction(data, element); 
       } 
      }, 
      error: function (req, status, errorObj) { 
       console.log(status); 
      } 
     }); 
    } 
} 
window.ajaxCall = api; 
return api; 
})(); 

Баскет-page.js

"use strict"; 

basket = basket || {}; 

var basket = (function (ajax) { 

    var api = { 

     init: function() { 
      $("#tblBasket").dataTable({ 
       bFilter: false, 
       pageLength: 10, 
       paging: true, 
       autoWidth: true, 
       columns: 
       [ 
        { "orderDataType": "dom-text", type: "string" }, 
        { "orderDataType": "dom-text-numeric" }, 
        null 
       ], 
       fixedColumns: true 
      }); 
     }, 

     removeBasketProductRow: function (data, element) { 
      if (data === true) { 
       element.remove(); 
      } 
     } 

    }; 

    $("#btnRemoveBasketProduct").click(function() { 
     var product = $(this).closest("tr"); 
     var productId = product.attr("id"); 
     window.ajaxCall.process("/Products/RemoveBasketProduct", productId, api.removeBasketProductRow); 
    }); 

    return api; 

})(window); 

$(document).ready(function() { 
    basket.init(); 
}); 
+1

Почему вы делаете 'window.ajaxCall = api;', а затем возвращаете 'api' для IIFE? – empiric

+0

И это '' use strict ";', кроме того, переменная 'element' в вашем' success' не определена – empiric

+0

Вы уверены, что оба файла загружаются при попытке выполнить функцию? – empiric

ответ

0

Проблема заключалась в том, что у меня уже был загружен другой файл сценария, так как это то, что добавляет объект в объект глобального окна.

0

Удалить всю функциональную упаковку. Это не нужно.

"user strict"; 
window.ajaxCall = { 
    process: function (destinationUrl, dataToPost, callbackFunction) { 
     $.ajax({ 
      url: destinationUrl, 
      data: dataToPost, 
      method: "POST", 
      dataType: "JSON", 
      success: function (data) { 
       if (element.length > 0) { 
        callbackFunction(data, element); 
       } 
      }, 
      error: function (req, status, errorObj) { 
       console.log(status); 
      } 
     }); 
    } 
}