Ajax方法总是进入错误函数。

15 浏览
0 Comments

Ajax方法总是进入错误函数。

我有一个简单的ajax方法:\n

$.ajax({
     type: 'POST',
     url: 'http://localhost:1195/widget/postdata',
     datatype: "jsondata",
     async: false,
     success: function (data) {
          alert("ok")
     },
     error: function (data) {
          alert(data.status + ' ' + data.statusText);
     }
});

\n以及C#中的这个简单方法:\n

[HttpPost]
public JsonResult PostData()
{
     return Json("1");
}

\n当我检查检查器控制台时,我在响应中看到\"1\",但我的ajax方法总是进入错误函数。\n为什么会这样呢?

0
0 Comments

Ajax method always goes to error function的问题出现的原因是使用了包含域名的完整URL,导致与当前服务器的域名不匹配。

解决方法是使用相对URL而不是包含域名的完整URL。这样做可以使部署更加简单,因为在上线时无需更改URL。

需要注意的是,在这种情况下,不能像上面那样设置URL,因为它不是一个本地URL。

0
0 Comments

问题的出现原因是在AJAX调用中,dataType应该是"json"而不是"jsondata"。此外,在url调用中应使用.Action标记和正确的url格式。解决方法是更正dataType为"json",并使用正确的url格式。

以下是一个小测试的例子,使用了与您发布的控制器方法相同的AJAX调用,我得到了正确的结果:

$(document).ready(function() {
    $("#button_1").click(function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: '.Action("PostData", "Home", null, Request.Url.Scheme)',
            dataType: "json",
            async: false,
            success: function(result) {
                alert(result);
            },
            error: function(error) {
                alert(error);
            }
        });
    });
});

输出结果:

[图片链接](https://i.stack.imgur.com/Myu8p.png)

即使这样也无法解决我的问题,因为它引用了本地url。尝试使用重载的.Action方法:.Action("postdata", "widget", null, Request.Url.Scheme)。更多信息请参考:stackoverflow.com/questions/434604/…

问题不在于url。问题是请求在目标服务器接收到,但响应在源服务器接收到,但AJAX方法仍然进入错误函数。

我已经创建了一个示例项目,其中使用了与您相同的AJAX调用和控制器方法。我从中获得了正确的响应。请参阅更新后的答案。您是否有接收到的错误响应片段?

您是否可以将ajax方法发送到另一个网址?假设您的应用程序域名是aaa.com,您能否从aaa.com向bbb.com发送AJAX请求并接收数据?

上述示例假设您的ActionMethod在同一个项目中。如果您想从不同域调用外部API,那么您需要在Controller中使用HttpClient,或者直接调用并获取响应。您能否向我展示您要调用的外部API?

由于您正在调用外部API,可能ajax调用返回的数据与dataType: "json"不匹配。您能否向我展示您收到的错误响应?

0