假设我有一个像这样的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")
答案 0 :(得分:1)
正如我在评论中指出的那样,您并未将值包含在生成的HTML中的引号中。对其进行更改以在任一侧添加单引号:
secondDropdown.append(
"<option value='" + item +"'>" + item + "</option>"
);