2016-02-12 53 views
0

我決定停止使用jQuery,因此我將所有內容轉換爲純JavaScript。JSON.stringify發送空對象

我有這個ajax電話,我想發送url的最後一部分到php服務器,但JSON.stringify()發送一個empty object在服務器。

這是怎麼發生的?

AJAX調用:

var ajax = new XMLHttpRequest(); 

ajax.open('get', 'ajax/autocomplete.php'); 
ajax.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); 
ajax.send(JSON.stringify({q: document.location.href.split('/').slice(-1)[0]})); 

PHP:

<?php 
    require_once '../../private/core/init.php'; 
    header('Content-Type: application/json'); 

    print_r($_GET);//empty 

    $data = new AUTOCOMPLETE($_GET['q']); 
    echo json_encode($data->data()); 
?> 

,我得到這個錯誤:Undefined index: q

+3

我不認爲你應該發送請求實體的GET請求。做一個POST或使用查詢參數('?q = ......')。 – Thilo

+0

但我會得到數據。不寫或更新。 @Thilo –

+1

只能使用POST請求發送參數數據。如果使用其他任何請求方法,數據將不會放入請求主體內部。 [文檔](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) –

回答

1

您可能要抑制與使用error_reporting PHP錯誤(0);或者先用isset/empty或其他一些可以抑制PHP警告的函數來驗證輸入數據。警告輸出將使您的JSON響應數據無效到您的JavaScript(jQuery或純JavaScript)。

<?php 
error_reporting(0); 
require_once '../../private/core/init.php'; 
header('Content-Type: application/json'); 

if (isset($_GET['q'])) { 
    $data = new AUTOCOMPLETE($_GET['q']); 
    echo json_encode($data->data()); 
} 
?> 
+0

是的,但即使我做POST請求也會發生同樣的問題。有什麼問題?即使使用POST,我仍然會得到一個空的對象 –