2013-06-04 3 views
1

모든 Ajax 기반 웹 사이트를 생성하므로 모든 작업에서 다른 JS 함수를 호출하므로 각 함수에서이 Ajax 코드를 사용하여 함수를 큰 코드로 만듭니다. 단축 단축 코드 AYX 코드

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) { 
     var getData=xmlhttp.responseText; 
     if(getData=="something") { 
      /* 
      code goes here 
      */ 
     } 
     else { 
      /* 
      code goes here 
      */ 
     } 
    } 
} 
xmlhttp.open("GET","mypage.php",true); 
xmlhttp.send(); 

그래서 나는 단지 아약스 코드 위에 포함 된 다른 기능을 사용하고 난 필요할 때마다 그래서 그것을 호출 할 필요가 세계적으로 내 변수 GetData의를 선언해야 물어보고 싶었다. 여기

내가 그것을 실행중인 다른 작업과 충돌을 만들 것인가

var getData=""; /*declaring var Globally (I read it like this dont know right)*/ 

function oneAjax(checkPage) { 
    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) { 
      getData=xmlhttp.responseText; 
      /*now check further in the function which called it*/ 
     } 
    } 
    xmlhttp.open("GET",checkPage+".php",true); 
    xmlhttp.send(); 
} 

을 사용하고 싶었 어떻게? 또는 내 문제에 대한 올바른 해결책을 제공하십시오.

function oneAjax(checkPage, done, fail) { 

    ... 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4) { 
      if (xmlhttp.status == 200) { 
       done(xmlhttp.responseText, xmlhttp.status); 
      } else { 
       fail(xmlhttp.status); 
      } 
      } 
    }; 

} 

는 요구 사항에 맞도록 콜백에 전달 된 매개 변수를 조정 : 당신은 기성품 라이브러리를 사용하지 않을 경우

답변

2

, 당신은 oneAjax에 "콜백"통과해야한다.

사용하려면

oneAjax('mypage', function(text, status) { 
    // success 
    console.log(status); 
}, function(status) { 
    // failure 
    console.log(status); 
}); 
+0

'oneAjax'를 어떻게 호출해야하는지에 대한 예제를 제공 할 수 있습니다. 콜백은 초보자에게 혼란을 줄 수 있다고 생각합니다. 튜토리얼의 경우 –

1

왜 JQuery와이나 뭐 이런 식으로 사용하지 않는? 그러한 라이브러리는 귀하의 진술을 훨씬 단축시킬 것이며 이것은 작성하기가 훨씬 쉬울 것입니다.

하지만 여전히 자신이 직접하고 싶다면 자바 스크립트 약속을 읽어야합니다. 내가 더 잘하고 또한 해결하기 위해 JSONP와 같은 기능을 제공하는 더 낮은 수준의 추상화를

<!-- add a protocol if on local ex: http: --> 
<script src="//code.jquery.com/jquery-1.10.0.min.js"></script> 
$.ajax({ 
    type: "POST", 
    url: "some.php", 
    data: { name: "John", location: "Boston" } 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

를 제공 할 jQuery 라이브러리를 사용하여 생각 Asynchronous Programming in JavaScript with “Promises”

+1

+1, 일반적인 "Y u no jquery"에 대해서는 그리 만족스럽지 않습니까? –

+1

jQuery는 은색 총알이 아닙니다. –

+1

@FelixKling 그것은 발에서 자신을 쏘기에 좋습니다. ;-) – Alnitak

0

: MSDN의 문제를 해결하는 방법 좋은 튜토리얼이있다 도메인 간 이슈

+0

JSONP는 jQuery에만 국한된 것이 아니며 JSONP는 함수 정의, '요소와 문서에 첨부하기 –

+0

그래,하지만 이미이 기능이 있으며 당신이 그것을 가리 키지 않아도됩니다.jQuery에는 이미 브라우저 간 호환성으로 코딩 된 많은 기능이 있습니다. –

+0

물론, jQuery를 사용하면 할 수없는 것처럼 들릴 수 있습니다. 나는 그것이 그것으로 더 쉽다는 것을 완전히 동의한다. –