这让我感到非常紧张。我试着解决这两天已经浏览了很多网页。没有得到ASP响应与JQuery AutoComplete一起工作
我想使用jquery-ui自动完成功能,正如http://jqueryui.com/resources/demos/autocomplete/remote-jsonp.html中的示例一样,但不是调用search.php,而是需要调用ASP文件(Microsoft IIS环境)。因此,我创建了上述HTML文件的本地副本,并仅调整了URL。
$(function() {
function log(message) {
$("<div>").text(message).prependTo("#log");
$("#log").scrollTop(0);
}
$("#birds").autocomplete({
source: function(request, response) {
$.ajax({
url: "http://jqueryui.com/resources/demos/autocomplete/search.php",
dataType: "jsonp",
data: {
term: request.term
},
success: function(data) {
response(data);
}
});
},
minLength: 2,
select: function(event, ui) {
log("Selected: " + ui.item.value + " aka " + ui.item.id);
}
});
});
.ui-autocomplete-loading {
background: white url("http://jqueryui.com/resources/demos/autocomplete/images/ui-anim_basic_16x16.gif") right center no-repeat;
}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery UI Autocomplete - Remote JSONP datasource</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<body>
<div class="ui-widget">
<label for="birds">Birds: </label>
<input id="birds">
</div>
<div class="ui-widget" style="margin-top:2em; font-family:Arial">
Result:
<div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>
</body>
- 现在,当我设置的URL的search.php中jquery.com(跨域,从我的Web服务器的文件,该文件也被原来的HTML)它工作有点慢,但很好
- 当我尝试用我的本地ASP文件从SQL中读取数据时,它不起作用,尽管当我直接在浏览器中调用该文件时,它将返回有效的JSON数据... I甚至改变了ASP文件,只做了一个
Response.Write
和硬编码的JSON数据 - 我也
Response.ContentType = "application/json"
试了一下,但这并没有帮助 - 然后我装一个自己的search.php文件,该文件也只做一些硬编码的JSON数据
echo
到https://softd4u.ch/search.php并试图调用此方法,但同样没有成功
我在互联网上发现了几个样本,ASP文件将直接作为源参数(通常是较旧的帖子)输入。我想这可能会起作用,但我认为通过AJAX调用该文件是有道理的。
试图调试jquery-1.12.4.js我至少发现有一个'parseerror'在某一点返回,但我不知道为什么和我应该做什么不同。在function ajaxHandleResponses(s, jqXHR, responses)
变量响应是不确定的,但它有效的情况下,但它没有工作时的情况下。
我确定文件实际上被调用(检查日志等),但他们从未触发AJAX调用的成功功能。
有没有人有一个想法,我在这里失踪?经典asp文件的
源 - 版本1(DB连接等在INC文件处理):传统的ASP文件的
<!-- #INCLUDE FILE="includes/general.inc" -->
<%
Dim errortextInternal, rs, search, sql
Dim coma
search = Request.QueryString("term")
sql = "SELECT TOP 20 itmId, itmNo, itmDescr1, itmDescr2, itmInact, CASE WHEN itsuSupId1 IS NULL THEN '' ELSE itsuSupId1 END AS SupId1, " & _
"CASE WHEN itsuSupId2 IS NULL THEN '' ELSE itsuSupId2 END AS SupId2, " & _
"CASE WHEN itsuSupId3 IS NULL THEN '' ELSE itsuSupId3 END AS SupId3 " & _
"FROM Items LEFT JOIN ItemsSuppl ON itmId = itsuItmId WHERE "
sql = sql & " (itmNo LIKE '%" & search & "%' OR itmDescr1 LIKE '%" & search & "%' OR itmDescr2 LIKE '%" & search & "%' OR EXISTS " & _
"(SELECT * FROM ItemsSuppl AS sub WHERE sub.itsuItmId = itmId AND (itsuSupId1 LIKE '%" & search & "%' OR itsuSupId2 LIKE '%" & search & "%' OR itsuSupId3 LIKE '%" & search & "%'))) ORDER BY itmNo, itmDescr1 "
'Response.ContentType = "application/json"
Response.Write("[")
coma = ""
Success = SelectDbRecords(errortextInternal, rs, sql)
If Success Then
Do While Not rs.EOF
Response.Write(coma & "{""id"":""" & rs("itmId") & """,""label"":""" & Server.HTMLEncode(rs("itmNo") & " - " & Trim(Trim(rs("itmDescr1")) & " " & Trim(rs("itmDescr2")))) & """,""value"":""" & Server.HTMLEncode(rs("itmNo") & " - " & Trim(Trim(rs("itmDescr1")) & " " & Trim(rs("itmDescr2")))) & """}")
If coma = "" Then
coma = ","
End If
rs.MoveNext
Loop
rs.ActiveConnection.Close
Else
Response.Write("Fehler!")
End If
Response.Write("]")
%>
源 - 版本2(用于测试目的的硬编码响应;无需检索查询字符串):
<%@LANGUAGE="VBSCRIPT"%>
<%
Response.Write("[{""id"":""Nycticorax nycticorax"",""label"":""Black-crowned Night Heron"",""value"":""Black-crowned Night Heron""},{""id"":""Ardea purpurea"",""label"":""Purple Heron"",""value"":""Purple Heron""},{""id"":""Tetrao tetrix"",""label"":""Black Grouse"",""value"":""Black Grouse""},{""id"":""Caprimulgus europaeus"",""label"":""European Nightjar"",""value"":""European Nightjar""},{""id"":""Picus viridis"",""label"":""European Green Woodpecker"",""value"":""European Green Woodpecker""},{""id"":""Saxicola rubicola"",""label"":""European Stonechat"",""value"":""European Stonechat""},{""id"":""Luscinia svecica"",""label"":""Bluethroat"",""value"":""Bluethroat""},{""id"":""Ardea cinerea"",""label"":""Grey Heron"",""value"":""Grey Heron""},{""id"":""Corvus cornix"",""label"":""Hooded Crow"",""value"":""Hooded Crow""},{""id"":""Sylvia curruca"",""label"":""Lesser Whitethroat"",""value"":""Lesser Whitethroat""},{""id"":""Pluvialis apricaria"",""label"":""European Golden Plover"",""value"":""European Golden Plover""},{""id"":""Sylvia communis"",""label"":""Common Whitethroat"",""value"":""Common Whitethroat""}]")
%>
我建议把jquery ui autosuggest换成更轻的解决方案,你可以自己调整。如果你喜欢,我可以发布一个包含样本的答案。 –
该示例使用[JSONP](http://stackoverflow.com/a/3840118/692942),你确定这是你想要做的吗?如果是这样,这里是如何发送回调 - [使用CLASSIC ASP将数据返回给jsonp调用](http://stackoverflow.com/a/33498470/692942)。可能是目前JQuery没有从你的页面得到正确的响应,所以永远不会触及'success'处理程序,你是否尝试过包括一个'fail'处理程序,甚至是'done'作为一个catch-all? Ref [The jqXHR Object](http://api.jquery.com/jQuery.ajax/#jqXHR)。 – Lankymart
ASP或PHP元素只是一个服务器端脚本。 jQuery UI自动完成将通过'GET'发送一个'term'到定义的'url'。所以它和ASP以及PHP一起工作良好。请编辑您的帖子并包含您的ASP代码,以便我们了解脚本对发送给它的文本的处理方式,以及它返回给您的AJAX呼叫的数据。 – Twisty