2016-12-30 1 views
0

node.js 형식의 Ajax에 문제가 있습니다. 간단한 node.js 통화 변환기 응용 프로그램을 개발하고 프론트 엔드 (HTML)에 데이터를 채우고 있습니다. 아약스 그러나 그것은 작동하지 않습니다, 어떤 도움을 심각하게 평가됩니다. 감사.node.js의 게시물과 같은 양식 메서드를 사용하는 Ajax

+0

는'form' 태그는 POST' 방법으로'이 있지만, 그것은 아무 소용이입니다. 'xmlhttp.open()'의 첫 번째 매개 변수를'GET'에서'POST'로 변경할 수 있습니까? –

+0

xmlhttp.open()에서 POST를 사용해 보았는데 xmlhttp.responseText로 빈 데이터를 얻었고 home.html이 공백이되어 home.html 대신 텍스트가 포함되어 있지 않음 – user3920709

+0

당신도'response.end()'를 가지고 있습니다. 함수가 주석 처리했습니다. 주석 처리를 제거하십시오. –

답변

1

1. 프론트 엔드이

xmlhttp.open("GET","http://localhost:9099/", true); 

xmlhttp.open("POST","http://localhost:9099/", true); 

에 백엔드 서버가 답을 얻기를 위해 POST을 받아

변경합니다.

2. 백엔드

바닥에서 response.endresponse.writeHead을 제거하고 store을 계산하는 곳으로 이동합니다.

귀하의 최종 코드 : 프론트 엔드 스크립트에서

http.createServer(function(request, response) { 
    switch (request.method) { 
    case 'POST': 
     if (request.url === "/") { 
     var requestBody = ''; 
     request.on('data', function(data) { 
      requestBody += data; 
      if (requestBody.length > 1e7) { 
      response.writeHead(413, { 
       'Content-Type': 'text/plain' 
      }); 
      response.end('Request Entity is too large'); 
      } 
     }); 

     request.on('end', function(data) { 
      console.log(requestBody); 
      var formData = qs.parse(requestBody); 

      var requestBofy = ''; 

      // I renamed the callback parameter to response2 
      https.get('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?8f65cd5d1af1727c40d2a89a31c6a0f1', function(response2) { 
      if (response2.statusCode >= 200 && response2.statusCode < 400) { 
       response2.on('data', function(data_) { 
       requestBofy += data_.toString(); 
       }); 
       response2.on('end', function() { 
       console.log(requestBofy); 
       parser.parseString(requestBofy, function(err, result) { 
        console.log('FINISHED', err, result); 

        var xml = requestBofy; 

        var parseString = require('xml2js').parseString; 
        parseString(xml, function(err, result) { 
        var jFile = JSON.stringify(result); 

        var parsedResponse = JSON.parse(jFile); 
        var rateHUF = parsedResponse['gesmes:Envelope']['Cube'][0]['Cube'][0]['Cube'][6]['$'].rate; 
        var rateINR = parsedResponse['gesmes:Envelope']['Cube'][0]['Cube'][0]['Cube'][22]['$'].rate; 
        var store = 'No value'; 
        if (formData.vSelectedValue == 'HUF' && formData.vSelectedValue2 == 'INR') { 
         store = Math.round(formData.vFirstNo * (rateINR/rateHUF)); 
        } else { 
         store = Math.round(formData.vFirstNo * (rateHUF/rateINR)); 
        } 

        // Your response should end here 
        response.writeHead(200, { 
         "Content-Type": "text/html" 
        }); 
        response.end('Your Answer: ' + store); 

        }); 

       }); 
       }); 
      } 
      }); 

     }); 
     } else { 
     response.writeHead(404, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('404 - Page not found'); 
     } 

     break; 
    case 'GET': 
     if (request.url === "/") { 

     getFileContent(response, 'public/home.html', 'text/html'); 

     } else { 
     response.writeHead(404, { 
      'Content-Type': 'text/plain' 
     }); 
     response.end('404 - Page not found'); 

     } 
     break; 

    default: 
     response.writeHead(404, { 
     'Content-Type': 'text/plain' 
     }); 
     response.end('404 - Page not found'); 

    } 

}).listen(9099); 
+0

나에게 당혹감을 남겨주세요. 그러나 node.js에 비교적 새로운 것이고 제 질문은 왜 우리가 결과를 새로운 html 페이지에 게시하겠습니까? response.writeHead (200, { "Content-Type": "text/html" }); response.end ('답변 :'+ 상점); 텍스트 상자의 home.html에 데이터를 게시하는 대신? 전체 요점은 텍스트 상자에 결과를 채우는 것이기 때문에 response.write()에서 "home.html"을 사용하지 않아야합니까? – user3920709

관련 문제