2014-01-30 11 views
0
function imageHandler(myToDo,myimageId) 
{ 
    $.get('{{path('imageHandler')}}', 
     {imageId: myimageId, toDo: myToDo}, 
     function(response) { 
      if(response.code == 100 && response.success) { 
       //success 
       alert(myToDo+' was sent'); 
      } 
      else if(response.code == 200) { 
       //code 200 = user not logged in 
      }; 
     }, "json"); 
} 

이것은 symfony2 애플리케이션을 작성하는 작업용 ajax 코드입니다.jquery없이 ajax 요청을 사용하는 방법

나는 jquery에서 데이터를 보내기 위해 $.get을 사용하고 있는데, jQuery없이이 함수를 작성하는 것이 어떻게 가능합니까?, 다른 비슷한 질문을 이미 들었지만 대답을 이해할 수 없습니다.

이미 여기

function imageHandler(myToDo,myimageId) 
{ 
    var hr = new XMLHttpRequest(); 
    var vars = {imageId: myimageId, toDo: myToDo}; 

    hr.open("GET", "{{path('imageHandler')}}", true); 
    hr.setRequestHeader("Content-type", "application/json"); 
    hr.onreadystatechange = function() 
    { 
     if(hr.code == 100 && hr.success) 
     { 
     //success 
     } 
     else if(hr.code == 200) 
     { 
     //code 200 = user not logged in 
     } 
    } 
    hr.send(vars); 
} 

을 시도 답변입니다 :

는 동료 그냥 질문에 대답.

req = new XMLHttpRequest(); 
req.onreadystatechange=function() { 
    status = req.status; //this is your response.code 
responseHtml = req.responseText; } 

req.open("GET","your ajax file here",true); 
req.send(); 

이 자바 스크립트에서 아약스 요청에 대한 그냥 생각이다 : 당신의 도움에 대한 덕분에, 여기 여기 당신이 시도 할 수 있습니다 뭔가 대답 자바 스크립트

function imageHandler(myToDo,myimageId) 
{ 
    var xml = new XMLHttpRequest(); 
    xml.open("GET", "{{path('imageHandler')}}", true); 
    xml.setRequestHeader("Content-type", "application/json"); 

    xml.onreadystatechange = function() 
    { 
     var serverResponse = JSON.parse(xml.responseText); 

     if(serverResponse.code == 100 && serverResponse.success) 
     { 
     //success 
     } 
     else if(serverResponse.code == 200) 
     { 
      //not logged in 

     } 

     xml.send({imageId: myimageId, toDo: myToDo}); 
    } 
} 
+7

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest – Quentin

+0

이미 시도했지만 코드가 응답하지 않습니다. 편집 한 질문을 확인해 주시면 감사하겠습니다. –

+0

* "하지만 코드가 응답하지 않습니다"*? 전반적으로 나는 당신이 * 실제로 * 문서를 읽지는 않았다고 생각합니다. –

답변

1

당신은 GET 요청을하지만 몸 요청을 보내려고 바로

hr.open("GET", "{{path('imageHandler')}}", true); 

하여 HTTP 동사를 가져옵니다. GET이 아닌 POST (또는 PUT)를 사용해야합니다. 또한

hr.open("POST", "{{path('imageHandler')}}", true); 

: 당신이 쓴 jQuery 코드는 GET 요청을하고 쿼리 문자열로 데이터를 인코딩합니다. 대신 그렇게 할 수 있습니다.


은 ... 당신은 JSON을 전송되지만 말은

hr.setRequestHeader("Content-type", "application/json"); 

을 보내는

var vars = {imageId: myimageId, toDo: myToDo}; 
hr.send(vars); 

당신이 주장하는 데이터 형식을 보내기 ... vars는 자바 스크립트 객체입니다. 문자열로 변환하면``[Object object] ''와 같이 보입니다. JSON을 보내려면 JSON을 만들어야합니다.

var vars = {imageId: myimageId, toDo: myToDo}; 
hr.send(JSON.stringify(vars)); 

데이터를 처리하는 서버 측 프로그램은 set up to handle JSON requests이어야합니다.

: 작성한 jQuery 코드는 JSON이 아닌 쿼리 문자열로 인코딩 된 데이터를 전송합니다. 대신 그렇게 할 수 있습니다.


올바르게

if(hr.code == 100 && hr.success) 

code 속성에서 오는가 응답 상태를 확인해야합니까? success 속성은 어디서 제공됩니까?읽은 문서에 나타나지 않습니다.

당신이 경우 테스트해야 다음 onreadystatechange를 사용하여 데이터를 처리하는 경우 :

  • 준비 상태가 완료
  • HTTP 상태가 OK입니다

같은 :

if (hr.readyState == 4 && hr.status == 200) 
+0

응답 해 주셔서 감사합니다. 코드와 성공 변수는 symfony2 컨트롤러에서 다음과 같이 반환됩니다. $ response = array ("code"=> 200, "success"=> false); return 새 응답 (json_encode ($ response)); –

+0

그런 다음 응답 상태를 확인한 후에는 JavaScript 객체에 대한 응답의 텍스트 내용을 구문 분석 한 다음 XHR 객체가 아닌 * that *에 원래 if 문을 실행해야합니다. – Quentin

0

입니다. more info here.

+0

'responseHtml = req.responseText; '는 잘못 표시됩니다. –

+0

답장을 보내 주셔서 감사합니다. 귀하의 제안은 이미 시도한 코드와 유사합니다 (<제 2 소스 코드> 참조). jquery와 javascript를 비교하여 동일한 응답을하지 못하는 이유를 확인해 주시면 감사하겠습니다. –

+0

@FelixKling : 나는 생각으로 바로 그것을 썼다. –

관련 문제