如何在ASP.net母版页中使用jQuery AJAX?

3
我有一个带母版页的ASP.net Web应用程序。在我的母版页的菜单栏中,有一个搜索功能,用户可以输入查询并点击按钮。当用户点击按钮时,用户的浏览器会导航到显示搜索结果的页面。这个功能非常好用。
然而,我决定使用jQuery AJAX和jQuery自动完成来使程序更容易使用。从http://example.com/page1.aspxhttp://example.com/page2.aspx进行搜索工作正常,但是从http://example.com/subdirectory/index.aspx不起作用。
以下是我的JavaScript代码来执行自动完成:(来自母版页)
function setupSerialNumberAutocomplete(id) {
    $(id).autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "DeviceSelection.aspx/getDeviceFieldAutocomplete",
                data: "{ 'text': '" + escape(request.term) + "', 'field': 'SerialNumber' }",
                dataType: "json",
                type: "POST",
                contentType: "application/json",
                dataFilter: function(data) { return data; },
                success: function(data) {
                    response($.map(data.d, function(item) {
                        return {
                            value: item
                        }
                    }))
                },
                error: function(xhr, status) {
                    var exception = eval("(" + xhr.responseText + ")");
                    $("#divStatus").html("Error fetching registration codes list: " + xhr.statusText + " - " + exception.Message + ".");
                }
            }); //end - ajax
        },
        minLength: 2,
        focus: function(event, ui) {
            $(id).val(ui.item.value);
            return false;
        },
        select: function(event, ui) {
            $(id).val(ui.item.value);
            return false;
        }
    }); 

这是一个jQuery AJAX调用DeviceSelection.aspx/getDeviceFieldAutocomplete,它是我ASP.net代码中的Web服务调用。 DeviceSelection.aspx位于http://example.com/DeviceSelection.aspx,因此我认为问题在于当用户访问http://example.com/subdirectory/index.aspx并输入查询时,它尝试调用http://example.com/subdirectory/DeviceSelection.aspx上的Web服务。

我该如何解决这个问题?

2个回答

4

把它改为这样:

...
$.ajax({
    url: "/DeviceSelection.aspx/getDeviceFieldAutocomplete",
    data: "{ 'text': '" + escape(request.term) + "', 'field': 'SerialNumber' }",
    dataType: "json",
...

斜杠“/”表示URL相对于域名而非当前页面。


我以http://example.com作为一个例子。如果页面位于http://example.com/mydirectory/DeviceSelection.aspx,我们能否获取与虚拟目录相关的内容? - Vivian River

2

我们能得到与虚拟目录相关的内容吗?

如果您在URL的代码中使用<%= Request.ApplicationPath %>并提供绝对路径,会怎样呢?同样,您可以使用客户端解析器来解决路径(我忘记了确切的语法,但它是存在的)。


@RiceFlourCookies ~ 记住,过度尝试往往会产生负面影响。 - jcolebrand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接