2012-05-15 2 views
0

페이지로드시 LinkPages() 함수를 호출하고 해당 HTML을 DIV에 추가하려고합니다.XMLHttpRequest 및 JavaScript 호출

MasterPage.aspx

function LinkPages() 
    var xmlhttp; 
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
    } 
    else {// code for IE6, IE5 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    alert(xmlhttp.responseText); 
    } 
    } 
    xmlhttp.open("GET", "Page1.aspx", true); 
    xmlhttp.send(); 
    } 

내가 다 퉜다 문제는 Page1.aspx라는이라고도되고 있지 않습니다 기능 GetMessage 함수에서 XMLHttpRequest의를 가지고있다. GetMessage() Page1.aspx에 스팬의 innerHTML 설정하고 호출되고 있다고 가정합니다.

Page1.aspx라는

function GetMessage() 
    var xmlhttp; 
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
    } 
    else {// code for IE6, IE5 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     document.getElementById("lblMessage").innerHTML = xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open("GET", "wfrmHelper.aspx?action=message", true); --returns string 
    xmlhttp.send(); 
    } 

그것은는 XMLHttpRequest의 페이지에 자바 스크립트를 호출 할 수 있습니까?

+0

.NET은 이제 jQuery와 함께 제공됩니다. 왜 XHR을 힘든 방식으로하고 있습니까? –

+0

'GetMessage()'함수는 어디에서 호출합니까? 일단 Page1.aspx로드가 완료되면 그렇게해야합니다. – lbstr

+0

이 프로젝트 빌드에서는 웹 페이지에서 jQuery를 사용하지 않고 음매 도구를 사용하기 때문에 XHR을 사용하고 있습니다. – user1167466

답변

0

MasterPage.apsx의 첫 번째 XHR에서 서버를 호출하고 일부 HTML을 다시 가져 오는 중입니다.이 Javascript GetMessage가 해당 페이지의 어딘가에 혼합되어 있다고 추측합니다. XHR의 responseText를 문서에 추가하지 않으면 JavaScript가 평가되지 않습니다. 그래서 ... LinkPages()에서 XKR 호출의 응답을 문서에 추가해야합니다. 그러면 GetMessage 함수가 브라우저에 의해 평가됩니다. 추가 될 때까지는 메모리에있는 문자열 일뿐입니다. DOM에 배치하기 전에는 실제로 스크립트로 변하지 않습니다. 나는 이것이 의미가 있기를 바랍니다.

-1

Re : XMLHttpRequest의 응답 페이지에서 javascript를 호출 할 수 있습니까?

예, 페이지에 응답을 추가하면 자동으로 발생하지 않습니다.

대신 응답에서 스크립트를 찾은 다음 각 스크립트를 호출해야합니다.

응답이 두 섹션 (하나는 HTML 용이고 다른 하나는 실행될 스크립트 용)을 포함하는 것이 더 좋습니다. 또한 또한 들어오는 JS는로드해야하는 libs가에 의존하는 경우 고려해야 할

  • {'html': '<div>blah blah....', // the html part of the response 
        'js': 'the javascript....'} // the javascript that you want to execute 
    

    예를 들어, 응답이 JSON 구조의 두 가지 속성을 가지고있다. 새로운 라이브러리 스크립트는 런타임에 추가 될 수 있습니다.

  • xmlhttprequest를 직접 호출하는 것은 매우 나쁜 생각입니다. jQuery 또는 다른 lib를 중간 단계로 사용하십시오.

    1. 버그 : 직접적 XMLHttpRequest를 호출하는 나쁜 생각을 왜

추가

. 더 많은 소프트웨어를 작성해야합니다 (라이브러리 사용과 비교하여). 더 많은 sw == 더 많은 버그, 더 많은 유지 보수 등. 나쁜 생각.

  • 테스트. 소프트웨어가 기능에 종속되거나 브라우저에 종속되어야합니다. 어쨌든 코드는 많은 사람들/응용 프로그램에서 사용중인 잘 테스트되고 지원되는 라이브러리에 의존하는 것보다 더 약합니다. 라이브러리를 광범위하게 사용하면 브라우저가 변경 될 때 계속해서 제대로 작동한다는 보장이 제공됩니다.
  • 유지 관리 가능성. 다른 브라우저의 경우를 처리하기위한 추가 소프트웨어는 표준 라이브러리를 사용하는 소프트웨어보다 관리자가 이해하고 업데이트하는 데 오래 걸립니다.
  • 비용. 더 많은 버그, 적은 테스트 및 유지 관리의 어려움은 시간이 지남에 따라 표준 라이브러리를 사용하는 sw보다 많은 비용이 들게된다는 것을 의미합니다.
  • 위조 경제. JS 라이브러리에는 다양한 선택 항목이 있습니다. 다운로드 크기가 문제가되면 더 완전한 (더 큰) 또는 더 작고 가벼운 라이브러리를 사용할 수 있습니다. (그리고 lib를 사용해야한다고 말했고 jQuery를 사용해야한다고 말하지는 않았다.)
  • 중복 코드. 라이브러리는 요즘 너무 일반적입니다. lib가 이미 페이지에서로드되었거나 브라우저 캐시에서로드 될 가능성이 매우 높습니다. 두 경우 모두 비 라이브러리 코드를 사용하면 lib를 사용하는 것보다 많은 공간/시간이 소요됩니다. 당신이 학생이고 할당이 라이브러리의 사용을 금지하는 경우 요약
  • , 표준 lib 디렉토리를 사용하지 않는 유일한 이유입니다.

    개발자가 Ajax 호출의 브라우저 비 호환성을 다루기 위해 lib를 사용하지 않는 이유가 없습니다. 동의하지 않는 경우 의견을 제공하십시오. 귀하의 경우에는

    +1

    -1 jQuery를 선호한다고 말하면서 "xmlhttprequest를 직접 호출하는 것은 매우 좋지 않습니다"라고 말하지 마십시오. – Christophe

    +0

    답변에 추가적으로 참조하십시오. –

    0

    , iframe이 더 나은 작동 할 수 있습니다 : 당신이 XMLHttpRequest의 원하는 경우 @에 의해 설명 된 바와 같이

    <iframe src="Page1.aspx" onload="LinkPages()"></iframe> 
    

    는, 당신은, 당신은 응답을 얻을 후 스크립트를 실행하는 방법을 찾아야합니다 아론 프로스트. jQuery와 같은 라이브러리는 당신을 위해 그것을 할 것입니다 (jQuery.load를 사용한다면, jQuery는 스크립트를 실행할 globalEval 함수를가집니다).