2016-12-30 56 views
0

我在使用node.js的表單中有一個Ajax問題,我正在開發一個簡單的node.js貨幣轉換器應用程序並使用前端(HTML)填充數據阿賈克斯。然而,它不工作,任何幫助都非常感激。謝謝。在form.js中使用表單方法作爲post的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('Your Answer:'+ store); 而不是將數據發佈到文本框中的home.html上?因爲整個問題的結果是填充文本框,所以我們不應該在response.write()中使用「home.html」? – user3920709