Jquery Ajax查询没有启动,因为它';它生成了错误的URL

Jquery Ajax查询没有启动,因为它';它生成了错误的URL,jquery,asp.net-mvc,vb.net,ajax,model-view-controller,Jquery,Asp.net Mvc,Vb.net,Ajax,Model View Controller,当第一个下拉列表更改时(即级联下拉列表),以下代码填充第二个下拉列表。但是,Ajax调用没有启动,我也不知道为什么。我没有收到任何语法或运行时错误。在调试模式下,永远不会调用GetPlans操作。从不调用内部警报,但调用外部警报。更糟糕的是,我的应用程序中的其他地方也有同样的设置!以下是所有相关信息(如果我遗漏了一些重要细节,请告诉我): “报告/验证”视图: 身份验证类: Public Class Auth Private _years As SelectList Publi

当第一个下拉列表更改时(即级联下拉列表),以下代码填充第二个下拉列表。但是,Ajax调用没有启动,我也不知道为什么。我没有收到任何语法或运行时错误。在调试模式下,永远不会调用GetPlans操作。从不调用内部警报,但调用外部警报。更糟糕的是,我的应用程序中的其他地方也有同样的设置!以下是所有相关信息(如果我遗漏了一些重要细节,请告诉我):

“报告/验证”视图:

身份验证类:

Public Class Auth

    Private _years As SelectList
    Public Property Years() As SelectList
        Get
            Return _years
        End Get
        Set(ByVal value As SelectList)
            _years = value
        End Set
    End Property

    Public Sub New()

        Dim disinctYears = _
            (From b In BenefitDataContext.GetContext.Benefits _
             Where b.repository_id = 1 _
             Select b.plan_year_val).Distinct

        Dim yearList = _
            From y In disinctYears _
            Order By y _
            Select New SelectListItem _
                With {.Text = y, _
                      .Value = y, _
                      .Selected = (y = Now.Year)}

        Years = New SelectList(yearList, "Value", "Text")

End Sub
Global.asax-注册路由:

routes.MapRoute( _
    "AuthReportGetPlans", _
    "GetPlans/{rid}/{year}", _
    New With {.controller = "Report", .action = "GetPlansByYear", .rid = "", .year = ""} _
)
有没有办法弄清楚到底发生了什么


更新:通过检查Ajax调用的错误输出发现了问题,因此现在我知道了问题的原因:URL被追加到当前路径,而不是从路由调用,即/Reports/Auth/GetPlans/1/2009而不是/GetPlans/1/2009。这是令人困惑的,因为它似乎是在global.asax中正确设置的,以映射到我设置的路线,如前所述,我在另一个视图中设置了它,它在那里工作正常。关于Ajax调用为什么指定错误路径的任何输入?

尝试捕获.Ajax调用的错误事件,看看它是否告诉您任何额外信息

$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "GetPlans/" + rid + "/" + year,
    data: "{}",
    dataType: "json",
    success: function(data) {
        alert('inside');
        if (data.length > 0) {
            var options = '';
            for (p in data) {
                var plan = data[p];
                options += "<option>" + plan + "</option>";
            }
            $("#plan").html(options);
        } else {
            $("#plan").html('');
        }
    },
    error: function(xhr){
        alert('something is b0rked')
        // take a look at xhr.status and xhr.responseText
    }
});
$.ajax({
键入:“获取”,
contentType:“应用程序/json;字符集=utf-8”,
url:“GetPlans/”+rid+“/”+年,
数据:“{}”,
数据类型:“json”,
成功:功能(数据){
警惕(“内部”);
如果(data.length>0){
var选项=“”;
对于(数据中的p){
var计划=数据[p];
选项+=“”+计划+“”;
}
$(“#计划”).html(选项);
}否则{
$(“#计划”).html(“”);
}
},
错误:函数(xhr){
警报('有东西被标记')
//看看xhr.status和xhr.responseText
}
});

尝试捕获.ajax调用的错误事件,看看它是否告诉您任何额外信息

$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "GetPlans/" + rid + "/" + year,
    data: "{}",
    dataType: "json",
    success: function(data) {
        alert('inside');
        if (data.length > 0) {
            var options = '';
            for (p in data) {
                var plan = data[p];
                options += "<option>" + plan + "</option>";
            }
            $("#plan").html(options);
        } else {
            $("#plan").html('');
        }
    },
    error: function(xhr){
        alert('something is b0rked')
        // take a look at xhr.status and xhr.responseText
    }
});
$.ajax({
键入:“获取”,
contentType:“应用程序/json;字符集=utf-8”,
url:“GetPlans/”+rid+“/”+年,
数据:“{}”,
数据类型:“json”,
成功:功能(数据){
警惕(“内部”);
如果(data.length>0){
var选项=“”;
对于(数据中的p){
var计划=数据[p];
选项+=“”+计划+“”;
}
$(“#计划”).html(选项);
}否则{
$(“#计划”).html(“”);
}
},
错误:函数(xhr){
警报('有东西被标记')
//看看xhr.status和xhr.responseText
}
});

它根本就没有点击URL吗?也许你应该让你的URL绝对化:

url: "/GetPlans/" + rid + "/" + year

还可以尝试在$(document).ready()上绑定操作,而不是立即绑定

它根本就没有点击URL吗?也许你应该让你的URL绝对化:

url: "/GetPlans/" + rid + "/" + year

还可以尝试在$(document).ready()上绑定操作,而不是立即绑定

检查以确保MicrosoftAjax.js没有出于自身目的使用$

如果是的话,你可以在这个网站上找到关于如何使用美元以外的东西的信息

例如:

。。。

检查以确保MicrosoftAjax.js没有出于自身目的使用$

如果是的话,你可以在这个网站上找到关于如何使用美元以外的东西的信息

例如:

。。。
愚蠢的问题。。。您确定脚本路径正确吗?我不得不进行一些黑客攻击,以确保我在正确的位置(请参阅)

我不是一个庞大的jQuery用户(我知道的很少,因此很危险),我会试图通过坚持

alert('Yep, I'm running');
在你的功能中的某个地方

编辑

我指向的线程并没有专门解决路径问题。基本上,我有一个名为GetRootPath的助手方法,它返回站点的根,我调用jQuery文件如下

<script src="<%= Html.GetBasePath() %>Scripts/jQuery.js" type="text/javascript"></script>

很抱歉给你带来了混乱


现在,我要试着教我的祖母吃蛋

愚蠢的问题。。。您确定脚本路径正确吗?我不得不进行一些黑客攻击,以确保我在正确的位置(请参阅)

我不是一个庞大的jQuery用户(我知道的很少,因此很危险),我会试图通过坚持

alert('Yep, I'm running');
在你的功能中的某个地方

编辑

我指向的线程并没有专门解决路径问题。基本上,我有一个名为GetRootPath的助手方法,它返回站点的根,我调用jQuery文件如下

<script src="<%= Html.GetBasePath() %>Scripts/jQuery.js" type="text/javascript"></script>

很抱歉给你带来了混乱


现在,我要试着教我的祖母吃蛋

这正是我所缺少的。电话是轰炸,但没有告诉我原因。现在我知道它将URL附加到当前路径(原始问题更新了详细信息)。非常感谢-这会在路上派上用场的。很好。这让我想到检查网络监视器中的响应主体。我的MVC应用程序拒绝了我的ajax调用,因为URL查询字符串太长。这正是我缺少的。电话是轰炸,但没有告诉我原因。现在我知道它将URL附加到当前路径(原始问题更新了详细信息)。非常感谢-这会在路上派上用场的。很好。这让我想到检查网络监视器中的响应主体。我的MVC应用程序拒绝了我的ajax调用,因为URL查询字符串太长。有趣。将其设置为绝对值(即添加前导斜杠)似乎可以解决问题。这很有趣,因为我的代码的另一个实现没有前导斜杠,并且工作得很好(这一个也可以与前导斜杠一起工作,所以我把它放在了两个地方)。我敢打赌代码停止时你在一个子目录中。有趣。M