2013-08-31 116 views
0

我想創建一個非常簡單的登錄窗體使用AJAX服務器通信和PHP作爲服務器端腳本。 作爲一個起點,我只是試圖通過JSON發送登錄數據到服務器,但它已經給我提出了問題。在JSON登錄AJAX POST請求

問題是,當我通過AJAX的POST請求發送數據時,我的服務器似乎沒有得到任何東西,根本沒有返回任何數據。 下面是請求的HTML:

<!DOCTYPE HTML> 
<html> 
<head> 
<title> Login experiment </title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script> 

$(document).ready(function AjaxJSON() { 
    $("form#loginForm").submit(function() { 
     var username = $('#username').val(); 
     var password = $('#password').val(); 
     var jsonlogin = "{\"username\" : \"" + username + "\" , \"password\" : \"" + password + "\"}"; 
     var str = 'json=' + jsonlogin; 
     $.ajax({ 
      type: 'POST', 
      url: 'login.php', 
      // URL of my PHP script 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      data: str, 
      success: function(data) { 
       alert("Data received!" + data); 
      } 
     }); 
     // ajax 
     }) 
    }) 

</script> 
</head> 

<body> 
<h1> LOGIN: </h1> 
<form id="loginForm" name="loginForm" method="post" action=""> 
<input type="text" id="username" name="username"> USERNAME <br> 
<input type="password" id="password" name="password"> PASSWORD <br> 
<input type="submit" class="button positive"> 
</form> 
</body> 
</html> 

此HTML代碼應該只需發送一個JSON字符串到PHP腳本編碼申請表(用戶名+密碼)。 劇本是這樣的:

<?php 
$result = json_decode($_POST['json']); 
echo $result->username; 
echo " "; 
echo $result->password; 
?> 

爲什麼它不給我任何答覆? 預先感謝您的幫助:)

+2

不要嘗試通過將字符串混合在一起來構建JSON。瀏覽器有'JSON.stringify' – Quentin

回答

0

您的主要問題是您聲稱您發送的是application/json; charset=utf-8。這是有兩個原因的一個問題:

  1. PHP沒有任何積累在處理JSON編碼的POST數據,以便$_POST將不會填充
  2. 你的數據是不是JSON的方法。這是(不正確地轉義)application/x-www-form-urlencoded數據(其中包括(不正確地轉義)JSON字符串作爲其數據片之一)

如果你想發送JSON,那麼:

  • 構建它使用JSON.stringfy沒有串
  • 一起搗碎,不要在它前面的棍json=
  • 獲取數據從POST身體as per this question

如果你不依賴於JSON,那麼就使用編碼格式數據的標準方法:

  • 忘記jsonlogin
  • 不要覆蓋默認contentType
  • 傳遞的對象您的數據到數據參數:data: { username: username, password: password }

你的下一個問題是,你一個重新說dataType: 'json',但你的PHP正在返回(無效)HTML(即PHP也容易受到XSS攻擊)。

+0

非常感謝您的答覆。我會嘗試JSON.stringify方法,並更好地檢查contentType和dataType字段:) –