簡體   English   中英

使用Ajax自動完成返回未找到與請求URI匹配的HTTP資源

[英]Autocomplete with Ajax returns No HTTP resource was found that matches the request URI

我正在嘗試使用來自Web方法的數據在文本框中實現自動完成功能。 該webmethod在瀏覽器上的工作方式如下:

http://localhost/psa/DesktopModules/PsaMain/API/ModuleTask/GetIssuers?SearchString=e

結果如下:

[{"IssuerID":1,"Name":"test tester","ChequeAccountNumber":"12345678","CurrencyCode":"EUR"}]

現在,我試圖在文本框中添加響應中的名稱數據,但以下函數出現錯誤:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost/psa/DesktopModules/PsaMain/API/ModuleTask/GetIssuers?{ 'SearchString': 'e'}'.","MessageDetail":"No action was found on the controller 'ModuleTask' that matches the request."}

下面,我的AJAX調用似乎由於某種原因而失敗,我認為這是由於錯誤地傳遞了參數造成的。 到目前為止,我還沒有使用Ajax的經驗,因此您的投入將會很大。

<script type="text/javascript">
$(function () {
        $("[id$=TextBox1]").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '<%=ResolveUrl("http://localhost/psa/DesktopModules/PsaMain/API/ModuleTask/GetIssuers")%>',
                    data: "{ 'SearchString': '" + request.term + "'}",
                    dataType: "json",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                label: item.split('-')[0],
                                val: item.split('-')[1]
                            }
                        }))
                    },
                    error: function (response) {
                        alert(response.responseText);
                    },
                    failure: function (response) {
                        alert(response.responseText);
                    }
                });
            },
            select: function (e, i) {
                $("[id$=hfIssuerID]").val(i.item.val);
            },
            minLength: 1
        });
    });
 </script>

我的網絡方法:

public class ModuleTaskController : DnnApiController
{
[AllowAnonymous()]
[HttpGet()]
public HttpResponseMessage GetIssuers(string SearchString)
{
    try {
        List<Issuers> listIssuers = new List<Issuers>();
        IssuersController ic = new IssuersController();
        listIssuers = ic.GetIssuers(10, SearchString);
        return Request.CreateResponse(HttpStatusCode.OK, listIssuers.ToJson);

    } catch (Exception exc) {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, exc);
    }
}
}

有任何想法嗎?

編輯:

  $(function () {
        $("[id$=TextBox1]").autocomplete({
            source: function (request, response) {
                var qstring = '?' + jQuery.param({ 'SearchString': request.term });
                $.ajax({
                    url: '<%=ResolveUrl("http://localhost/psa/DesktopModules/PsaMain/API/ModuleTask/GetIssuers")%>' + qstring,
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return {
                                label: item.split('-')[0],
                                val: item.split('-')[1]
                            }
                        }))
                    },
                    error: function (response) {
                        alert(response.responseText);
                    },
                    failure: function (response) {
                        alert(response.responseText);
                    }
                });
            },
            select: function (e, i) {
                $("[id$=hfIssuerID]").val(i.item.val);
            },
            minLength: 1
        });
    });

您的Web方法是GET並接受querystring但您的Ajax調用正嘗試傳遞JSON對象,該對象將附加到URL的末尾。 您可以通過閱讀錯誤消息中的URL實際URL來查看此內容

您可以做很多事情。 這只是一個。

 // turn your search object into querystring
var qstring = '?'+ jQuery.param({ 'SearchString': request.term});
 // append this querystring to the end of your url
$.ajax({
        url: '<%=ResolveUrl("http://localhost/psa/DesktopModules/PsaMain/API/ModuleTask/GetIssuers")%>' + qstring ,
        // remove data and datatype
        type: "GET",
        //... etc

同樣在這種情況下,看起來您不需要ResolveUrl。

也許嘗試使用以下網址:

url:'http://localhost/psa/DesktopModules/PsaMain/API/ModuleTask/GetIssuers' + qstring;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM