これと同じ、Webフォームの1つにJSONPオートコンプリート機能を提供する必要があります: http://jqueryui.com/autocomplete/#remote-jsonp。
基本的に、ユーザーが入力した検索語に一致する WCF サービスから返された値をドロップダウンに動的に入力したいと考えています。
WCF サービスが正常にヒットし、テキスト ボックスの内容が検索パラメーターとして正常に渡されます。Web サービスは返されますが、私は常に jQuery の「エラー:」ブロックに陥ります。
これは、私自身の WCF サービスを呼び出す、改造された jQuery (上記のリンクの AutoComplete サンプルから取得) です。
$("#txtModels").autocomplete({
source: function (request, response) {
$.ajax({
url: "http://localhost:12345/webapi/models",
dataType: "jsonp",
data: {
search: request.term
},
success: function (data) {
alert("Success"); //never reach here
//response($.map(data.models, function (item) {
// return {
// label: item.model,
// value: item.model
// }
//}));
},
error: function() {
alert("Error"); //always an error
}
});
},
minLength: 2,
select: function (event, ui) {
//log(ui.item ?
// "Selected: " + ui.item.label :
// "Nothing selected, input was " + this.value);
},
open: function () {
//$(this).removeClass("ui-corner-all").addClass("ui-corner-top");
},
close: function () {
//$(this).removeClass("ui-corner-top").addClass("ui-corner-all");
}
});
これがWCFサービスです。ヒットし、エラーなしで戻ります。
[OperationContract]
[WebInvoke(Method = "GET",
BodyStyle = WebMessageBodyStyle.Wrapped, //tried ".Bare" also
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "models?search={search}")]
public string[] GetBoxSerialNums(string search)
{
string[] models = new string[]{"Ford", "Chevy", "Honda"};
return models;
}
WCF プロジェクトは、組み込みの WCF テンプレートを使用して作成されたため、web.config にはエンドポイント構成がありませんが、ここではとにかく:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<!--removed-->
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.cs file and the default endpoint
via the attributes on the <standardEndpoint> element below
-->
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" maxReceivedMessageSize="10240000" maxBufferSize="10240000" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
<appSettings>
<!--removed-->
</appSettings>
</configuration>
私はjQuery/JSON、特にJSONPにまったく慣れていませんが、WebサービスがjQuery呼び出しで期待される形式でデータを返していないことは明らかです。この作業を行うには、何をする必要がありますか?