空格和空格后的字符未在GET请求中传递

时间:2019-01-18 10:27:21

标签: django

假设我有一个像这样的Django模型:

class myModel(models.Model):
    names = models.Charfield(max_length=200)

此模型中存储的对象的值为'Amanda','John Nash','Richard Benson'和'Joe Williams'

现在我有一个带有select元素的html表单。我正在使用ajax函数从myModel中获取要放入option元素的值.Form是这样的:

<form>
  <select multiple name='MyNames'>
    <option value='Amanda'>Amanda</option>
    <option value='John Nash'>John Nash</option>
    <option value='Richard Benson'>Richard Benson</option>
    <option value='Joe Williams'>Joe Williams</option>
  </select>
  <input type='submit' name='Save'>
</form>

如果我选择“ Amanda”,“ John Nash”和“ Richard Benson”,然后单击“保存”,则这是我在服务器上获取的GET请求。

HTTP GET /testPage/?MyNames=Amanda&MyNames=John&MyNames=Richard&Save=Submit

从GET请求中很明显,如果从服务器中获取值,则空白和空格后的字符不会被拾取。可能的原因和解决方案是什么。

如果我不从服务器获取选项的值,而是手动将值放在选项元素中,则不会发生这种情况。在这种情况下,请求就是这样。

HTTP GET /testPage/?MyNames=Amanda&MyNames=John+Nash&MyNames=Richard+Benson&Save=Submit

P.S:这只是示例代码。由于实际代码很长,为了清楚起见,我没有给出实际代码。请提前

实际Ajax功能

$.ajax({
          url:"other",
          type:"GET",
          data: {key:"items"},
          dataType:"json",
          success: function(response)
          {
            if(response.data)
                {
                  var secondDropdown = $(".selB_1"); // select 2nd dropdown
                   secondDropdown.empty();                // empty dropdown
                   secondDropdown.append(
                        "<option " + "disabled selected value" + ">" +"Select corressponding value for key" + "</option>");
                        for (var item of response.data) {      // loop response & create options
                        console.log(item)
                        secondDropdown.append(
                            "<option value=" + item +">" + item + "</option>"

                        );
                    }
                  }
                }
              });

实际Django视图:

class MyChoices(View):
    def get(self,request,*args,**kwargs):
        key = request.GET.get('key')
        if key is None:
            return HttpResponse(json.dumps({
                "error": "Field 'key' is required."
            }), content_type='application/json')

        elif key == 'items':
            data = []
            key_qs = ItemsSearched.objects.all().values(key)


            for item in key_qs:
                if item[key] not in data:
                    data.append(item[key])

            return HttpResponse(json.dumps({"data": data}), content_type="application/json")

1 个答案:

答案 0 :(得分:1)

正如我在评论中指出的那样,您并未将值包含在生成的HTML中的引号中。对其进行更改以在任一侧添加单引号:

secondDropdown.append(
    "<option value='" + item +"'>" + item + "</option>"
);