我希望有人可以帮助我。我正在构建一个GreaseMonkey脚本来修改现有页面以添加其他功能。作为其中的一部分,我尝试使用JQuery将AutoComplete添加到文本框中。我是jQuery的新手,所以我可能做了一些愚蠢的错误,但我已经盯着这个问题太久了。
这是正常的请求Body看起来像:
["Mc"]
这就是HTTP响应的样子:
"[{\"__type\":\"\",\"key\":\"62bb420a-5f3a-4a99-97b1-115beaa29b8e\",\"value\":\"McDonalds\",\"html\":null,\"data\":new Data.Dictionary(\"\",[[\"ARGSTCode\",null],[\"APGSTCode\",null],[\"ContactDefaultCurrency\",\"CURR/USD\"],[\"OrganisationTemplate\",\"\"],[\"Discount\",\"\"],[\"ContactDefaultBillDueDate\",\"\"],[\"ContactDefaultBillDueType\",null],[\"ContactDefaultBillDueTypeDisplay\",\"of the following month\"],[\"ContactDefaultInvoiceDueDate\",\"\"],[\"ContactDefaultInvoiceDueType\",null],[\"ContactDefaultInvoiceDueTypeDisplay\",\"of the following month\"],[\"DefaultAPContactAccountType\",\"\"],[\"DefaultARContactAccountType\",\"\"],[\"DefaultARTrackingCategories\",\",,,\"],[\"DefaultAPTrackingCategories\",\",,,\"]])},{\"__type\":\"\",\"key\":\"df8fd73c-1016-4bf7-a448-257c0414af9f\",\"value\":\"Mortgage\",\"html\":null,\"data\":new Data.Dictionary(\"\",[[\"ARGSTCode\",null],[\"APGSTCode\",null],[\"ContactDefaultCurrency\",\"CURR/USD\"],[\"OrganisationTemplate\",\"\"],[\"Discount\",\"\"],[\"ContactDefaultBillDueDate\",\"\"],[\"ContactDefaultBillDueType\",null],[\"ContactDefaultBillDueTypeDisplay\",\"of the following month\"],[\"ContactDefaultInvoiceDueDate\",\"\"],[\"ContactDefaultInvoiceDueType\",null],[\"ContactDefaultInvoiceDueTypeDisplay\",\"of the following month\"],[\"DefaultAPContactAccountType\",\"\"],[\"DefaultARContactAccountType\",\"\"],[\"DefaultARTrackingCategories\",\",,,\"],[\"DefaultAPTrackingCategories\",\",,,\"]])}]";/*
这就是我的代码看起来像是添加了自动完成
$('.text.ajax') .each(function (index, el) {
el.id = el.id + index;
var a = $(el);
a.autocomplete({
source: function (request, response) {
$.ajax({
url: Ajax.url + location.search,
type: 'POST',
data: '["' + request.term + '"]',
dataType: 'json',
ContentType: 'text/plain; charset=utf-8',
headers: {
'X-AjaxPro-Method': 'GetStuff'
},
success: function (data) {
response($.map(data, function (item) {
var text = v.value;
return {
label: item.value,
value: item.key
};
}))
},
select: function(event, ui) {
$(el).val = ui.item.value;
}
})
}
})
});
在我输入字段时查看代理,该请求会正确发送到正确的位置,并获得正确的响应,但不显示任何内容以显示自动完成值。
我做错了什么?
字段示例:
<input class='text ajax' id="test_value1" type="text" name="test_value1" maxlength="255">
<input class='text ajax' id="test_value2" type="text" name="test_value2" maxlength="255">
答案 0 :(得分:0)
我找到了问题的答案。事实证明我的例程没有返回有效的JSON数据。由于我指定了一个“json”的数据类型,这意味着“成功”从未被击中,因为存在一个parseError。
我首先尝试将其转换为“脚本”,这本来应该有效,但是出于某些愚蠢的原因,它们在字符串的末尾有一个未关闭的注释字符(/ *),所以这不是工作要么。
结果,我将类型更改为“Text”,编写了我自己的正则表达式例程来提取我需要的数据,其他一切都很好; - )。