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

时间:2017-10-28 08:17:02

标签: php ajax slim-3

将其他数据传递到我的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在我的服务器上总是NULL,而car工作正常。我还var_dumped了整个请求并搜索了model,但遗憾的是它不存在。

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

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

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

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

他将JSON放在请求网址的末尾,我认为这不是标准行为?

3 个答案:

答案 0 :(得分:1)

只试用data:{model:model}代替JSON.stringify({"model": model})。查看更多信息http://api.jquery.com/jquery.ajax/

答案 1 :(得分:1)

为什么

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

  

尽可能基本

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数据

答案 2 :(得分:0)

以这种方式传递数据,数据:{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){}                      
    });
});