2014-04-18 60 views
2

我是AngularJs的新手。我正在嘗試使用angularjs創建一個簡單的應用程序。 在一個簡單的應用程序中,我無法通過$ _POST,$ _GET或$ _REQUESTin在我的php腳本中打印發布的數據。 使用file_get_contents(「php:// input」)時,我可以打印數據。

任何人都可以讓我知道爲什麼$ _GET,$ _POST和$ _REQUEST不工作?

我的index.html代碼:

<!DOCTYPE html> 
<html ng-app> 
<head> 
<title>Search form with AngualrJS</title> 
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" /> 
    <script src="http://code.angularjs.org/angular-1.0.0.min.js"></script> 
    <script src="search.js"></script> 
</head> 

<body> 

    <div ng-controller="SearchCtrl"> 
    <form class="well form-search"> 
     <label>Search:</label> 
     <input type="text" ng-model="test" class="" placeholder="Keywords..."> 
     <button type="submit" class="btn" ng-click="search()">Search</button> 
     <p class="help-block">Try for example: "php" or "angularjs" or "asdfg"</p>  
    </form> 
<pre ng-model="result"> 
{{result}} 
</pre> 
    </div> 
</body> 

</html> 

search.js代碼:

function SearchCtrl($scope, $http) { 
    $scope.url = 'search.php'; // The url of our search 

    // The function that will be executed on button click (ng-click="search()") 
    $scope.search = function() { 

     // Create the http post request 
     // the data holds the keywords 
     // The request is a JSON request. 
     $http.post($scope.url, { "data" : $scope.test}). 
     success(function(data, status) { 
      $scope.status = status; 
      $scope.data = data; 
      $scope.result = data; // Show result from server in our <pre></pre> element 
     }) 
     . 
     error(function(data, status) { 
      $scope.data = data || "Request failed"; 
      $scope.status = status;   
     }); 
    }; 
} 

的search.php代碼:

<?php 
// The request is a JSON request. 
// We must read the input. 
// $_POST or $_GET will not work! 

$data = file_get_contents("php://input"); 

$objData = json_decode($data); 

// perform query or whatever you wish, sample: 

/* 
$query = 'SELECT * FROM 
tbl_content 
WHERE 
title="'. $objData->data .'"'; 
*/ 

// Static array for this demo 
$values = array('php', 'web', 'angularjs', 'js'); 

// Check if the keywords are in our array 
if(in_array($objData->data, $values)) { 
    echo 'I have found what you\'re looking for!'; 
} 
else { 
    echo 'Sorry, no match!'; 
} 

任何援助將不勝感激。

+1

我們無法告訴您沒有您想要做的事情的片段,無論是在角度方面還是在PHP方面。 –

+0

嗨看守..我已經包含代碼給我的問題。 – Maverick

+0

in search.php $ _POST,$ _ GET不工作,爲什麼? – Maverick

回答

0

要隨着我對在php.ini不好設定的可能性評論去,this article(通過this one聯繫,從我的評論)也提供了這句話:

如果Content-Type是空的或者在HTTP消息中沒有被識別,那麼PHP $ _POST數組是空的。不知道這是一個bug或者是由設計...

的症狀是相同的,(空$_POST但可通過php://input數據),這帶來了這個錯誤發生的兩個可能的原因數量:

    在php.ini post_max_size設置
  1. 爲值或空Content-Type頭
  2. 語法錯誤正在從前端送到

若y我們的設置爲post_max_size是正確的,那麼可能是角度將刪除該帖子的Content-Type標題。根據this questionthis question,如果沒有有效載荷或空有效載荷與任何請求一起發送,我相信這是您的問題,那麼angular將移除Content-Type標頭。

嘗試在SearchCtrl添加此:

function SearchCtrl($scope, $http) { 
    $scope.url = 'search.php'; // The url of our search 
    $scope.test = {test:'test'}; // Add me 
    // ... 

我懷疑你的$_POST陣列會變得填充,因爲現在是一個Content-Type頭與請求一起發送,而發送實際的請求數據。如果可行,這意味着您的test輸入未與範圍正確綁定,或者您提交的是空數據。嘗試在HTTP請求之前添加一個警戒條款:

if($scope.test) { 
    $http.post($scope.url, { "data" : $scope.test}) 
    // ... 
相關問題