2013-04-22 2 views
1

JavaScriptResult을 반환하기 위해 정상적으로 작동하는 MVC 4를 사용하고 있습니다. 나는 간단한 자바 스크립트로 그것을 테스트했다.반환 된 스크립트에서 jquery getScript가 질식합니다.

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
<meta name="viewport" content="width=device-width" /> 
<title>Categories Page</title> 
<script type='text/javascript' src='https://www.google.com/jsapi'></script> 
<script src="~/Scripts/jquery-2.0.0.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getScript('http://localhost:53353/z/categories'); 
    }); 
</script> 
</head>  
<body> 
    <h2>test</h2> 
    <div id="chart_div"> 
    </div>   
</body> 
</html> 

을하지만 대체 할 경우 : 내가 getScript 브라우저에 자바 스크립트를 반환 불을 지르고에서 볼 수 있지만 그러나

, 아래의 코드가 작동하지 않습니다

$(document).ready(function() { 
     $.getScript('http://localhost:53353/z/categories'); 
}); 

을 있습니다 .. 함께 getScript이 호출되면 자바 스크립트가 브라우저로 반환되고 코드가 작동합니다.

getScript이 호출 될 때 반환되는 자바 스크립트는 google barchart를 호출하는 표준 자바 스크립트입니다. getScript이 스크립트 태그를 추가하기 때문에 반환 된 스크립트에서도 스크립트 태그가 생략됩니다.

getScript은 반환 된 스크립트를 복사하여 붙여 넣기하고 getScript 섹션으로 바꿀 수있는 이유는 무엇입니까? 그 이유는 반환 된 스크립트에 결함이 없다는 것을 확실히 알기 위해서입니다. 대체 할 때 올바르게 렌더링됩니까?

확인. MVC를 잊어 버리자. 우리가 지금을 다시 작성하는 경우,

google.load('visualization', '1', { packages: ['corechart'] }); 
google.setOnLoadCallback(drawChart); 
function drawChart() { 
var data = google.visualization.arrayToDataTable([ 
    ['Year', 'Sales', 'Expenses'], 
    ['2004', 1000, 400], 
    ['2005', 1170, 460]  
]); 
var options = { title: 'Company Performance', vAxis: { title: 'Year', titleTextStyle: { color: 'red' } } }; 
var chart = new google.visualization.BarChart(document.getElementById('chart_div')); chart.draw(data, options); } 

그러나 :

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Categories Page</title> 
    <script type='text/javascript' src='https://www.google.com/jsapi'></script> 
    <script src="scripts/jquery-2.0.0.js"></script> 
    <script type="text/javascript" src="scripts/testscript.js"></script> 
</head> 
<body> 
    <h2>test</h2> 
    <div id="chart_div"> 
    </div>  
</body> 
</html> 

testscript.js 만 포함 그냥, 우리는 작동 다음이 ( https://developers.google.com/chart/interactive/docs/gallery/barchart의 예를 기반으로 자바 스크립트) HTML을 사용하여 라인 ...

<script type="text/javascript" src="scripts/testscript.js"></script> 

... 같은

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.getScript('scripts/testscript.js'); 
    }); 
</script> 

... Firebug의 Response에서 testscript.js의 내용을 볼 수 있지만 브라우저가 멈 춥니 다. testscript.js의 내용을 alert('hello');과 같이 간단하게 대체하면 getScript가 정상적으로 작동하지만 testscript.js와 getScript가 복잡해지면 getScript가 작동을 멈 춥니 다.

+0

브라우저 콘솔의 네트워크 탭에서 확인하십시오. 요청 상태는 무엇입니까? 200 인 경우 머리글과 응답 본문을 검사하십시오. – charlietfl

+0

예, 상태가 "200 OK"이므로 헤더를 확인한 결과 : 헤더 요청 : Accept \t accept text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; Q = 0.01 수락 인코딩을 \t GZIP을 을 수축 ... 응답 헤더 : 캐시 제어 개인 콘텐츠 인코딩 gzip을 콘텐츠 길이 447 콘텐츠 형식 응용 프로그램/X-자바 스크립트; charset = utf-8 ... 요청 - 응답 헤더의 내용 유형 차이점은 무엇입니까? charset? JavaScriptResult를 사용하여 이것을 변경할 수 있는지 확실하지 않습니다. 응답 본문은 테스트를 위해 자바 스크립트를 복사하여 태그에 붙여 넣기 위해 사용 했으므로 OK입니다. – flarebear

답변

1

파일을로드하기 전에 해당 파일이 아직로드되지 않았을 수 있습니다.
success 함수에서 연산을 시도해 볼 수 있습니까?

$.getScript('http://localhost:53353/z/categories', function(data, textStatus, jqxhr) { 
    if(textStatus == 'success') { 
     //do work here 
    } 
}); 
+0

제안 해 주셔서 감사합니다. 나는 그것을 시도하고 textStatus == '성공'은 사실이지만 '// 여기에서 일한다'는 스크립트는 작동하지 않았다. – flarebear

0


나는 실제로 필요로하는 것으로 알려져 때까지 다소 무거운 날짜 선택 스크립트의 로딩을 밀어, 내가 일하고 있어요 응용 프로그램에 대한 $.getScript을 사용했습니다.

브라우저가 공백 상태가되어 영원히로드되는 것처럼 보이는 종류의 걸려있는 걸 발견했습니다.

DOM을 검사 한 결과 날짜 선택 도구 스크립트가 document.write() 호출을 사용하여 문서를 조작하고 문서에 추가하는 대신 문서 전체가 바뀌 었음을 발견했습니다. 내 애플 리케이션 에서이 문제를 해결 제거하지만, 나중에 나는 이미 jQuery UI가 있다는 것을 발견하고 내가 바보 같은 레거시 데이트 피커를 사용하는 것입니다.

물론 질문이 게시 된 지 오래되었으므로 가능성은 모두 지금으로 계산되었습니다.

관련 문제