使用ajax

时间:2018-05-16 14:56:57

标签: php jquery ajax symfony

我正在尝试将通过ajax键入的文本发送到php页面,该页面将使用收到的文本进行查询。我想知道如何将变量nmClient的值发送到php页面。我尝试了以下代码,返回值为500 (Internal Server Error)。我正在使用框架Symfony

Jquery的

            var name = $("#name").val();

            $.ajax({
                url: "../search",
                type: "POST",
                data: {'name':name},
                dataType: "json"

            }).done(function(response) {
                console.log(response);

            }).fail(function(jqXHR, textStatus ) {
                console.log("Request failed: " + textStatus);

            }).always(function() {
                console.log("done");
            });

PHP

public function searchAction(Request $resquest)
{

    if ($request->isXMLHttpRequest()) {
        $name = $request->get('name');
        return new JsonResponse(array('name' => $name));
    }

    return new Response('This is not ajax!', 400);
}

1 个答案:

答案 0 :(得分:0)

我相信你试图在错误的地方访问参数nameget()实例上提供了ParameterBag方法,而不是Request实例。请尝试以下方法:

$name = $request->request->get('name');

根据文档here

  

每个属性都是一个ParameterBag实例(或其子类),它是一个数据持有者类:

     
      
  • request:ParameterBag;
  •   
  • query:ParameterBag;
  •   
  • cookies:ParameterBag;
  •   
  • attributes:ParameterBag;
  •   
  • files:FileBag;
  •   
  • server:ServerBag;
  •   
  • headers:HeaderBag。
  •   
     

所有ParameterBag实例都有检索和更新数据的方法:

     
      
  • get()按名称返回参数。
  •   

以下是该页面的示例:

// the query string is '?foo[bar]=baz'   
$request->query->get('foo');

在docs示例中,参数通过 GET 方法作为查询字符串传递,但是他们通过query ParameterBag实例访问它们。您需要使用request Parameter Bag实例,因为您的参数是通过 POST 方法传递的。