2014-07-23 5 views
0

나는 현재 AJAX가 작동하는 PHP 파일을 불러 가지고, 그 다음입니다 : 하나의 자바 스크립트 내에서 작동IIFE를 사용하는 AJAX 호출? 되는 .done가 일반 함수와 동일하게 작동시킬 수없는 것은

//Load map from database 
function getMap(){ 
    return $.ajax({ 
    url: "getMap.php", 
    type: "POST", 
    dataType: 'JSON', 
    }); 
}; 
getMap().done(function(r) { 
    if (r) { 
     loadedMap(JSON.parse(r.mapArray), JSON.parse(r.mapProperties)); //call  loadedMap(r) if loading a map from DB 
    } else { 
     console.log("No data"); 
    } 
}).fail(function(x) { 
    console.log("error"); 
}); 

r.mapArray 및 r.mapProperties를 내 주요 loadedMap 함수에 성공적으로 전달하는 파일.

저는 IIFE 자바 스크립트 모듈 모델에 대해 배우려고 노력 중이며, 제 작품을 별도의 파일로 나눕니다.

(function() { 
    // let's get our map 
    var gameMap = mapGen.getMap().done(); 
    console.log(gameMap); 
})(); 

및 mapGen.js :

var mapGen = function() { 
    return { 
     getMap: function() { 
     return $.ajax({ 
      url: "getMap.php", 
      type: "POST", 
      dataType: 'JSON', 
     }); 
     } 
    }; 
}() 

내가 (gameMap)를 CONSOLE.LOG 경우에, 나는 내 데이터로에서 responseText JSON 객체를 참조

그래서, 나는 현재 main.js가 . 나는 그것에 접근 할 수없는 것 같습니다. console.log (gameMap.responseText)가 정의되지 않았습니다. gameMap.responseJSON도 마찬가지입니다 (콘솔에 두 가지가 있지만).

답변

1

코드를 살펴보면 파일의 분리가 문제가 아니며 올바르게 구현 된 것처럼 보입니다. 문제는 AJAX 요청을 처리하는 방법입니다. mapGen.getMap() 함수는 실제로 액세스하려는 응답과 반대로 jqXHR 객체를 반환합니다.

이전 파일에서와 마찬가지로 요청에 대한 응답을 처리해야합니다.

(function() { 
    // let's get our map request 
    var gameMap = mapGen.getMap(); 
    gameMap.done(function(r){ ... }). 
    fail(function(x){ ... }); 
})(); 

done() 함수 내에서 찾고있는 응답 데이터에 액세스 할 수 있습니다.

+0

당신은 여분의 기능을했습니다 (r)하지만 그 트릭을! 내 주요 질문은 : 내 목표가 기능을 다른 JS 파일로 분리하는 것입니다.하지만 모든 JS 파일과 함수 내에서 해당 AJAX 데이터에 대한 액세스가 필요합니다 ... mapGen을 호출해야합니다. getMap을 사용할 때마다 필요한 모든 함수를 AJAX 데이터의 매개 변수로 전달할 수 있습니다. 흠. 전역 데이터 객체가 필요한 경우 기능을 분리하기가 어려워 보입니다. 답을 고맙게 생각합니다. 나는 이것이 코멘트가 없었던 시간 때문에 길을 잃을 것이라고 생각했다. –

+1

나는 여분의 팸을 수정하기 위해 편집을했다. 당신이 찾고있는 것을 얻기 위해 이것을'initMap (콜백)'과'getMap()'의 두 가지 연산으로 나눌 수 있습니다. 그런 다음 initMap은 AJAX 요청의 결과를 저장하고 콜백을 실행할 수 있으므로 코드에 이제 맵 데이터가 있습니다. 예제의 jsfiddle. 참고 : AJAX 호출은 올바른 경로가 없기 때문에 오류가 발생합니다. [예를 들어 피들] (http://jsfiddle.net/2fDL7/) –