2016-02-12 89 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,我仍然会得到一个空的对象 –