如何在angularjs中将参数传递给$ http?

San*_*ram 40 http params angularjs

假设我有两个输入框,其对应的ng-model为fname和lname.如果我将http请求称为:

$http({method:'GET', url:'/search', params:{fname: fname, lname: lname}})
Run Code Online (Sandbox Code Playgroud)

它会调用网址:

/search?fname=fname&lname=lname
Run Code Online (Sandbox Code Playgroud)

我在后端(python)得到的错误是:

cannot concatenate str and nontype objects.
Run Code Online (Sandbox Code Playgroud)

这些参数不是作为字符串发送的吗?如果没有,如何解决这个问题?

sle*_*anc 73

这是你如何做到的:

$http.get("/url/to/resource/", {params:{"param1": val1, "param2": val2}})
    .then(function (response) { /* */ })...
Run Code Online (Sandbox Code Playgroud)

Angular负责编码参数.

Maxim Shoustin的答案不起作用({method:'GET', url:'/search', jsonData}不是一个有效的JavaScript文字)和JeyTheva的答案虽然简单,但是很危险,因为它允许XSS(连接它们时不会转义不安全的值).


Max*_*tin 15

将URL构建'/search'为字符串.喜欢

"/search?fname="+fname"+"&lname="+lname
Run Code Online (Sandbox Code Playgroud)

其实我没用过

 `$http({method:'GET', url:'/search', params:{fname: fname, lname: lname}})` 
Run Code Online (Sandbox Code Playgroud)

但我确信"params"应该是JSON.stringify这样的POST

var jsonData = JSON.stringify(
    {
        fname: fname,
        lname: lname 
    }
);
Run Code Online (Sandbox Code Playgroud)

后:

$http({
  method:'GET',
  url:'/search',
  params: jsonData
});
Run Code Online (Sandbox Code Playgroud)