2017-03-23 2 views
2

현재 JS를 연구 중이며 바닐라 JS에 익숙하지만 JQuery 구문이 약간 이상해 보입니다. 그래서 내가 JS에 다음 코드를 가지고 있고 그것은 잘 작동 : 여기vanilla JS에서 AJAX 요청을 JQuery로 다시 작성하는 방법은 무엇입니까?

let xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
    questions = JSON.parse(this.responseText); 
    loadQuestionsData(); 
    } 
}; 
xhttp.open("GET", "http://localhost:8080/questions", true); 
xhttp.send(); 

내 로컬 호스트에 새로운 XMLHttpRequest 객체를 생성하고 질문의 JSON을 얻고 responce가 준비되면, 기능 loadQuestionsData() 실행 (그것은 질문 목록을 표에 삽입합니다). 이걸 JQuery로 다시 작성하려고 시도했지만 작동하지 않으며 이유가 없습니다. 다음은이 작업을 수행하는 제 n 번째 시도이다 : 나는 또한 다음을 시도했습니다

$(document).on('readystatechange', function() { 
    $.ajax({ 
    url: "http://localhost:8080/questions", 
    type: 'GET', 
    success: function() { 
     questions = JSON.parse(this.responseText); 
     loadQuestionsData(); 
    } 
    }) 
}) 

,하지만 너무 작동하지 않습니다

$(document).on('readystatechange', function() { 
    questions = JSON.parse($.ajax({ 
    url: "http://localhost:8080/questions", 
    type: 'GET', 
    })).responseText; 
}) 

나는 문제가 구문 겠지? 코드는 응답 텍스트에서 실행이 중지됩니다.

+0

확인 오류 콘솔 :

은 단순히 코드를 변경합니다. 나는 jQuery가 당신을 위해 응답을 deserialise 할 것이기 때문에 문제를 추측 할 것이다. 그러므로 당신은 객체에서'JSON.parse()'를 호출하고 오류를 얻는다. –

+0

문서 개체에'readystatechange' 이벤트가 있습니까? 해당 이벤트 처리기에서 코드를 이동하면 작동합니다. – Archer

+1

@Archer 잘 목격, 그보고 싶었어. OP 대신 document.ready 처리기를 사용하십시오. '$ (function {) {$ .ajax (...' –

답변

1

문서 개체에 onreadystatechange 이벤트가 없습니다.이 개체는 XHR 개체의 일부입니다. jQuery AJAX 메서드는 상태 변경을 처리합니다 (단순함의 일부).

또한 성공 핸들러에는 응답 텍스트 인 매개 변수가 있으므로 함수 시그니처에 추가해야 함수에 액세스 할 수 있습니다. 이 대신에

변경을 ... 당신은 사용할 필요가 없습니다

$.ajax({ 
     url: "http://localhost:8080/questions", 
     type: 'GET', 
      success: function(responseText) { 
      questions = JSON.parse(responseText); 
      loadQuestionsData(); 
     } 
    }) 
+0

나에게 많은 도움이 된 와우! 이제는 잘 작동합니다! 게다가 * responseText *가 이미 필요한 방식으로 구문 분석 되었기 때문에 JSON.parse를 제거 할 수 있다고 밝혀졌습니다! 도움을 많이 주셔서 감사합니다! –

+0

문제 없음 - 도움이 되니 기쁩니다 :) – Archer

0

: readystatechange

$(document).on('readystatechange', function() { 
}); 

는 XMLHttpRequest의의 속성입니다();

$.ajax({ 
    url: "http://localhost:8080/questions", 
    type: 'GET', 
    success: function() { 
     questions = JSON.parse(this.responseText); 
     loadQuestionsData(); 
    } 
    }); 
+0

네, 해냈어. 도와 주셔서 감사합니다! –

관련 문제