通过 AJAX 传递数据以 NULL 值响应

Passing data via AJAX responds in NULL values

将附加数据传递到我的 REST 服务器效果不佳。

我有这个简单的 ajax 电话:

// Client
$(document).on('click', '#car', function(e){   
    e.preventDefault();
    var name  = $(this).data('name');    // Tesla
    var model = $(this).data('model');  // X
    $.ajax({ 
        type: "GET", 
        contentType: 'text',
        cache: false,   
        url: "http://server:80/api/v1/cars/" + name,
        data: JSON.stringify({
                "model": model
              }),         
        success: function(data, textStatus, jqXHR){ },
        error: function(jqXHR, textStatus, errorThrown){}                      
    });
});

问题是 model 在我的服务器上总是 NULLcar 工作正常。我也 var_dumped 整个请求并搜索了 model 但不幸的是它不在那里。

// Server
public function show($request, $response, $args)
{          
    $model = $request->getParsedBody()['model']; 
    $name  = $args['id'];

    echo $model;     // NULL
    echo $name;      // Tesla
}

我也不明白为什么我的请求URL在浏览器的开发工具下是这样的:

http://server:80/api/v1/cars/Tesla.txt?{"model":"X"}

他把 JSON 放在请求的末尾 url 我认为这不是标准行为?

尝试 data:{model:model} 而不是 JSON.stringify({"model": model})。查看更多信息http://api.jquery.com/jquery.ajax/

这样传数据,data: {model:JSON.stringify(model)},

$(document).on('click', '#car', function(e){   
    e.preventDefault();
    var name  = $(this).data('name');    // Tesla
    var model = $(this).data('model');  // X
    model = JSON.stringify(model);

    $.ajax({ 
        type: "GET", 
        contentType: 'text',
        cache: false,   
        url: "http://server:80/api/v1/cars/" + name,
        data: {model:model},         
        success: function(data, textStatus, jqXHR){ },
        error: function(jqXHR, textStatus, errorThrown){}                      
    });
}); 

为什么

通常 get 是一个查询字符串,其中数据通过 URL 传递,变量附加到 URL 和 POST 数据通过请求正文传递 POST 可以传递比 GET 更多的数据。在 GET 中,所有内容都必须是您 URL 的一部分 POST 中不能添加更多数据 您的所有数据都必须通过邮件正文发送

as basic as it get

Your typical query String : http://example.com/over/there?name=ferret&sname=somethingelse

Yout would use $_GET['name'];

and For POST

URL:http://example.com/over/there
Message Body name=ferret&sname=somethingelse

$_POST['name'];

所以在 php 你有一个叫做 $_REQUEST; 的东西 在 jave 中你会使用 request.getParameters 它会自动为你处理 这个 $_REQUEST 处理 get 和 POST data