2017-04-02 128 views
0

我試着從我的服務器端發送的數據與阿賈克斯我的客戶端,但是當我使用節點res.send(數據),它顯示我的數據空html和我想從我的客戶端數據,而無需重新加載頁面,並在我的實際HTML阿賈克斯不能與節點JS工作 - 快遞JS

這裏編輯的東西是我的服務器端代碼

app.post('/',(req,res)=>{ 
    var userName = req.body.username; 
    var password = req.body.password; 

    connection.query('SELECT * from admin',(err, rows, fields)=> { 
     if (!err){ 
     if((userName == rows[0].usuario) && (password == rows[0].contraseña)){ 
      res.sendStatus(200);  

     }else{ 
      res.send('Incorrect username or password') 
     } 
     }else{ 
     res.send('Error while performing Query.'); 
     } 

    }); 

}); 

這裏是我的客戶端代碼

$(document).ready(function(){ 
$('#login-form').submit(function (e) { 
     setTimeout(function() { 
     e.preventDefault(); 
     $.ajax({ 
      type: 'POST', 
      url: '/', 
      dataType: 'jsonp', 
      data: ({username: $('input[name=username]'),password: $('input[name=password]')}), 
      success: function(data,textStatus){ 
       if(textStatus.statusCode == 200) { 
        $('.error-user').html('Succes');  
       }else{ 
        $('.error-user').html('Not Success'); 
       } 


      }, 
     }); 
     }, 1000); 

});  
}); 

更新:我刪除了setTimeOut(),但當我提交表單頁面凍結像兩秒鐘,然後什麼也沒有發生,我得到這個'錯誤最大調用堆棧大小超過',不要讓我的數據只是留在相同的看法,如果像POST方法從來沒有所謂

UPDATE決賽:我得到了阿賈克斯之外的輸入值和它的作品很好,謝謝:#

+0

添加錯誤處理程序Ajax調用。它也看起來像你不回發jsonp – epascarello

+0

你爲什麼使用'setTimeout()'?這是問題的一部分。你的表單已經提交,並且在你運行你的ajax調用之前,在你調用'e.preventDefauilt()'之前,表單提交就會重新加載頁面,所以調用的時間太晚了。除去'setTimeout()'或在'setTimeout()'之前放置'e.preventDefault()'。在任何一種情況下,'setTimeout()'看起來都像是一團糟的代碼。如果你認爲你正在修復某些東西,那麼這是一個黑客攻擊,你應該修正它的正確方法,並刪除'setTimeout()'。 – jfriend00

+0

外觀更新問題 –

回答

1

刪除這是防止你的preventDefault從實際運行的setTimeout事件處理程序,並導致您在瀏覽器負載中而不是ajax處理程序中查看響應,然後從中進行調試。

+0

如果我這樣做,頁面凍結了一會兒,然後什麼都沒有發生,它給了我這個錯誤='超過最大調用堆棧大小' –

+0

你可以添加信息到你的問題,如完整的代碼和確切的錯誤消息?setTimeout絕對不正確..所以調用堆棧是修復 –

+0

看看更新的問題 –

0

Preventdefault正在創建問題。您可以刪除運行Ajax調用

+0

仍然帶我到另一個html –

0

如果我理解正確的話,你可能要使用的請求方法。

要從節點服務器的數據檢索數據的頁面完成加載時,你應該使用GET方法。

要發送當表單提交您經常會發送從客戶端JS的請求作出的節點服務器上的數據庫的持久變化節點的請求。根據你想實現什麼,你應該使用POSTPUTPATCHDELETE方法。

這些方法通常會創建,更新,更新數據集的一部分,或從SQL或可用的NoSQL數據庫到您的節點服務器中刪除記錄或文件。

+0

我不能使用GET方法,因爲信息是來自用戶的用戶名和密碼 –

1

你忘了:.val()發送的輸入值:

data: ({username: $('input[name=username]').val(), password: $('input[name=password]').val() }), 

和NOT:

data: ({username: $('input[name=username]'),password: $('input[name=password]')}),