2016-06-13 53 views
2

我想使用Ajax向PHP發送POST請求。Ajax POST方法不能在PHP中工作,但GET正在工作

如果我使用GET,它可以正常工作,但使用POST時,我在php中收到的數據是空的。 我將數據作爲json發送。

這是js代碼的樣子:

$.ajax(
     { 
      type: 'POST', 
      url: 'php/GiveItBack.php', 
      contentType: "json", 
      data: { 
       word: 'abc' 
      }, 
      success: function (json) { 
       alert(json); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
     }); 

這是PHP/GiveItBack.php文件

<?php 

$x = $_GET['word']; 
echo 'Get: ' . $x; 

$x = $_POST['word']; 
echo '; Post: ' . $x; 

$x = $_REQUEST['word']; 
echo '; Request: ' . $x . ';'; 

?> 

有了這個代碼,在警報窗口的消息是這樣的:

獲取:帖子:;要求:;與型「POST」的js文件

如果我更換型「GET」這是結果我在警報窗口獲取(因爲我是期待看到):

Get:abc;帖子:;要求:abc;

我看不到我在這裏失蹤的東西。 代碼中出現錯誤,或者是我需要爲此工作的任何特殊設置。

通過我公司採用的方式:jQuery的2.2.4.min和PHP V5.6和XAMPP V3.2.2。

謝謝。

+0

你檢查你的的phpinfo? POST是否被激活? –

+0

這條線**; enable_post_data_reading =關**評論缺省情況下爲上。所以我猜這是激活的。 – Horatiu

+0

嘗試打印而不是回聲,不太確定爲什麼,但過去使用echo的問題 –

回答

4

內容類型不正確,則需要使用contentType: "application/x-www-form-urlencoded" OR 'Content-Type': 'application/json'

$.ajax(
    { 
     type: 'POST', 
     url: 'php/GiveItBack.php', 
     contentType: "application/x-www-form-urlencoded", 
     data: { 
      word: 'abc' 
     }, 
     success: function (json) { 
      alert(json); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
    }); 
+0

爲什麼?你能解釋爲什麼需要刪除POST嗎? – Styphon

+0

謝謝。這工作。但是,使用** contentType的問題是什麼:「json」**? – Horatiu

+1

@Horatiu因爲'json'不是有效的內容類型。這就像表單中的enctype一樣。我希望達拉真的會爲你提供一個解釋。我認爲你所追求的是'dataType',它指定了返回數據的格式。 – Styphon

0
$.ajax(
    { 
     method: 'POST', 
     url: 'php/GiveItBack.php', 
     data: { 
      word: 'abc' 
     }, 
     success: function (json) { 
      alert(json); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
    }); 
+2

類型是方法的別名...那麼爲什麼它應該以這種方式工作?你能解釋一下嗎? –

+0

我試圖用方法替換類型...不起作用。試圖使用方法和類型,仍然無法正常工作。 – Horatiu

1

contentType: "json",

您內容類型是錯在這裏。如果您想按照您嘗試的方式接收它,您應該使用application/x-www-form-urlencoded

如果你還是想內部JSON堅持,你將不得不json_decode你的PHP輸入:

$json = file_get_contents('php://input'); 
$obj = json_decode($json, TRUE); 
0

刪除contentType: json,你應該能夠使用$_POST superblogal陣列。如果使用contentType: json,則包含參數的對象將轉換爲字符串併發送到服務器。要獲得字符串中,你將需要使用

file_get_contents('php://input');

這是因爲$_POST只包含下列頭一起發送的數據:

  • 應用程序/ x-WWW窗體-urlencoded
  • multipart/form-data-

當你設置contentType: json時,jQuery增加了application/json頭請求未通過$_POST所以JSON字符串被視爲原始輸入,因此,你需要使用php://input流進行檢索

0

刪除contentType: json支持:

$.ajax(
     { 
      type: 'POST', 
      url: 'php/GiveItBack.php', 

     data: { 
      word: 'abc' 
     }, 
     success: function (json) { 
      alert(json); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); } 
    }); 
+0

請檢查這個[URL](http://stackoverflow.com/help)它將有助於提高您的內容質量 –

相關問題