【问题标题】:Succes method of $.Ajax does not work in ASP MVC$.Ajax 的成功方法在 ASP MVC 中不起作用
【发布时间】:2026-01-13 00:35:01
【问题描述】:

我阅读了几乎所有关于该主题的帖子。但不幸的是我无法处理我的问题。这个问题至少对我来说真的很尴尬: 我有一个简单的 C# 代码来检索 ShoppingController 类中提交因素的跟踪状态,如下所示:

  public string StatusOfFactor( string guid )
    {
        // note that guid was being trimmed in javascript

        Factor factor = (from Factor fact in db.Factors
                         where fact.TrackingCode.ToString() == guid
                         select fact).First();
        return factor.StatusOfFactor;

我有一个 javascript 函数,它调用这个方法如下:

function TrackPurchase() {
    var txtTrackingPurchase = $("#inputpeygiry");
    var guid = $.trim(txtTrackingPurchase.val());
    var urlMain = 'ShoppingController/StatusOfFactor';
    alert(urlMain);

    $.ajax({
        type: 'GET',
        url: urlMain,
        cache: false,
        data:  guid,
        success: function (returnVal) { 
            alert("I am sucess function");
            $("#StatusOfFactor").html(returnVal);

        },
        error: function (e) {
            $("#StatusOfFactor").text("nothing is really exist");
        }
    });    
}

请注意,我有一个带有id="inputpeygiry" 的文本框,它接收用户的跟踪代码。上面的javascript函数是通过点击下面的按钮调用的:

  <input type="button" class="btn btn-success pull-left" id="btnpeygiry" value="Track Purchase" onclick="TrackPurchase()"/>

所以问题是成功函数永远不会调用!!! 请大家帮我解决一下好吗?

【问题讨论】:

  • 你找到正确的网址了吗?看看“购物/StatusOfFactor”是否有效
  • 路径如下: public class ShoppingController : Controller { ApplicationDbContext db = new ApplicationDbContext(); #region Status of Factor for Tracking a purchase public string StatusOfFactor( string guid ) { // 注意 guid 在 javascript 中被修剪 Factor factor = (from Factor fact in db.Factors where fact.TrackingCode.ToString() == guid select事实).First();返回因子.StatusOfFactor; } }
  • 在您的 ajax 请求中执行“shopping/StatusOfFactor”。我认为这会起作用(我认为 mvc 将“控制器”部分作为默认行为)
  • 我查过了。但仍然无法正常工作。我也一直在清除我的历史记录。但什么也没发生。我真的需要帮助

标签: javascript ajax asp.net-mvc model-view-controller


【解决方案1】:

您使用的是哪个版本的 jQuery?自 jQuery 3.0 起,回调方法被删除。您可以改用jqXHR.done()jqXHR.fail()jqXHR.always()

查看jQuery Get的文档

$.ajax({
    type: 'GET',
    url: urlMain,
    cache: false,
    data:  guid,
})
.done(function (returnVal) { 
    alert("I am sucess function");
    $("#StatusOfFactor").html(returnVal);

}).
fail(function (e) {
    $("#StatusOfFactor").text("nothing is really exist");
});

【讨论】:

  • 那你为什么不用donefail呢?它从 1.5 版开始可用。
  • 我的代码如下: function TrackPurchase() { var txtTrackingPurchase = $("#inputpeygiry"); var myGuid = $.trim(txtTrackingPurchase.val()); $.get("ShoppingController/StatusOfFactor", { guid: myGuid }) .done(function (returnVal) { alert("我是成功函数"); $("#StatusOfFactor").html(returnVal);}) 。 fail(function () { $("#StatusOfFactor").text("هیچ فاکتوری با این کد رهگیری یافت نشد"); }) 但是完成的函数从不调用
  • 你能调试控制器动作吗?参数填写正确,动作返回正确的值?
  • 是的,我检查过了。我将其设为 partialView,并从 db 中获取值。
【解决方案2】:

GET 更改为POST,它应该适合您。

控制器代码变为:

[HttpPost]
public string StatusOfFactor( string guid )
{
    // note that guid was being trimmed in javascript
    Factor factor = (from Factor fact in db.Factors
                     where fact.TrackingCode.ToString() == guid
                     select fact).First();
    return factor.StatusOfFactor;
}

Javascript代码变成:

function TrackPurchase() {
var txtTrackingPurchase = $("#inputpeygiry");
var guid = $.trim(txtTrackingPurchase.val());
var urlMain = 'ShoppingController/StatusOfFactor';
alert(urlMain);
    $.ajax({
        type: 'POST',
        url: urlMain,
        cache: false,
        data:  guid,
        success: function (returnVal) { 
            alert("I am sucess function");
            $("#StatusOfFactor").html(returnVal);

        },
        error: function (e) {
            $("#StatusOfFactor").text("nothing is really exist");
        }
    });
}

【讨论】:

  • 当他不想获得价值时,为什么要使用Post
  • 我也换了浏览器,但是没用。
  • 是因为我的脚本顺序吗?我的脚本顺序如下: