2016-12-06 11 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;'하고 IIFE에 대해 'api'를 반환합니까? – empiric

+0

그리고''use strict ';','success'의'element' 변수가 정의되지 않았습니다 – 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); 
      } 
     }); 
    } 
}