2017-01-17 1 views
-2

아약스 요청시 서버에 데이터를 보내는 올바른 방법입니까?아약스에 데이터 보내기

var xhttp = new XMLHttpRequest(); 
      xhttp.onreadystatechange = function() { 
      if (this.readyState == 4 && this.status == 200) { 
       alert(response); 
      } 
      }; 
      xhttp.open("GET", "https://myurl/", true); 
      xhttp.send(JSON.stringify("{ action: 'search', mode: question}")); 

나는이 오류 때문에 405 (Method Not Allowed - Action not found)

+1

이 코드와 관련하여 5 가지 개별적인 문제점을 볼 수 있습니다. 일반적인 문제의 경우 그 중 하나는 잘못된 것으로 간주됩니다. 그러나 : "이 웹 서비스의 기대치를 충족시키기 위해 HTTP 요청의 형식을 어떻게 지정해야합니까?" ... 그리고 당신은 그 서비스에 관해 우리에게 아무 것도 말하지 않았습니다, 그래서 우리는 그것이 무엇을 기대하는지 알 수있는 방법이 없습니다. – Quentin

답변

0

아니, 그와 몇 가지 문제가 있습니다 :

  1. alert(response);response 변수가 없기 때문에 실패합니다; 당신은 아마도 alert(xhttp.responseText)을 원할 것입니다.

  2. GET을하고 있지만 POST 본문을 보내려고합니다. 너는 그렇게 할 수 없다. GET 정보는 본문이 아닌 URL에 있습니다.

  3. 당신은 JSON을 보내고 있지만, JSON으로 식별하지는 않습니다.

  4. 당신은 그 작업이 JSON 문자열로 일을 변환하는 것입니다으로서 일반적으로 당신이 객체가 아닌 문자열을 전달 것 JSON.stringify,로 문자열을 전달하고 있습니다.

(서버가 클라이언트에서 JSON을 허용하도록 설정되어 있는지, 예를 들면) 당신이 POST를 수행하는 의미 가정하면, 당신은 정말 JSON을 보낼 않습니다, 다음 최소한의 변경은 다음과 같습니다

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     alert(xhttp.responseText);         // 1 
    } 
}; 
xhttp.open("POST", "https://myurl/", true);       // 2 
xhttp.setRequestHeader("Content-Type", "application/json");   // 3 
xhttp.send(JSON.stringify({ action: 'search', mode: question}));  // 4 

question은 in-scope 변수라고 가정합니다.

+0

이 오류는 여전히 발생합니다. '405 (메서드가 허용되지 않습니다 - 동작을 찾을 수 없습니다.)' –

+0

@af_inb : Quentin이 말했듯이, 호출하는 끝점에 더 많은 것이 있습니다. 이것은 우리가 가지고있는 작은 정보로 수정할 수있는 문제를 해결합니다. –