2014-01-21 43 views
1

這應該是一個相當簡單的調用,但我似乎無法使其工作。基本上,我試圖將一組搜索參數傳遞給PHP腳本,但是$ _POST即將變空。呼叫(通過jQuery)...

self.search = function() { 
    var data = { 
     'year': 2013, 
     'month': 10, 
     'day': 1 
    }; 

    $.ajax({ 
     dataType: 'json', 
     type: 'POST', 
     url: 'repositories/blogposts.php', 
     data: { 'search': data }, 
     success: function(results) { 
      // populate knockout vm with results... 
     } 
    }); 
}; 

的PHP代碼等着要做的事情與傳入的JSON對象...

if (isset($_POST['search'])) { 
    echo find_blogposts(json_decode($_POST['search'])); 
} 

我試過這個方法很多,但不管是什麼, print_r($_POST)給了我一個空的數組。少了什麼東西?

+0

試着用'數據:{搜索:JSON.stringify(數據)}' – undefined

回答

3

PHP可能會窒息您嘗試發送的對象。

您應該發送的數據對象直接:

data: data, 

(獲得$_POST['year']等在PHP)

或將對象轉換爲一個JSON字符串,你可以在PHP端進行解碼:

data: { 'search': JSON.stringify(data) }, 
+0

我已經試過這兩種方法,無論是在工作。從技術上講,'dataType:'json''應該強制對象成爲JSON字符串。 – gfish3000

+1

@ user1446184不,dataType:'json'指定(並解析...)結果爲json,它與發送給服務器的數據無關。 – jeroen

+1

@ user1446184另外請注意,由於您已經指定了要解析爲json的結果,因此不能只使用「echo」或「print_r」任何東西。 find_blogposts()是否返回有效的json?檢查開發人員工具的「net」選項卡,以查看您真正找回的內容。 – jeroen

0

find_blogposts()裏面會發生什麼?

或者您可以嘗試.post()

$.post("repositories/blogposts.php", { year: "2013", month:"10", day:"1" }, function(data){ 
    // do something here 
}); 

在你的PHP剛剛收到$_POST['year'],這將是2013年

希望它能幫助。

這裏是api doc for .post()

+0

因爲'$ _POST'是空的,所以我們甚至沒有找到'find_blogposts()'。不,'$ .post()'在這裏也顯得無能爲力。 – gfish3000