【问题标题】:JQUERY AJAX not returning valueJQUERY AJAX 不返回值
【发布时间】:2014-07-09 14:13:45
【问题描述】:

请看下面的代码:

<script type='text/javascript'>
        $(document).ready(function () {
            $("button").click(function(){
                alert('Test');
                $('#div1 h2').text('Hi I am replace');
                var divToBeWorkedOn = "#div1";
                var n1 = 1;
                var n2 = 2;
                var webMethod = "Service1.svc/getNumber";

                $.ajax({
                    type: "POST",
                    url: webMethod,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (result) {
                        $(divToBeWorkedOn).html(val(result));
                    },
                    error: function (e) {
                        $(divToBeWorkedOn).html(e.responseText);
                    }
                });
            })
        });
    </script>

这是来自服务器端的代码:

 Public Function getNumber() As Integer Implements IService1.GetNumber
        Return 1
    End Function

单击按钮后,div1 不包含任何文本。我认为它正在调用 Web 服务,因为当我错误地将其命名为 Service.svc/getNumber 时它出错了。我在做什么?

【问题讨论】:

  • 你的val函数是做什么的?你在$(divToBeWorkedOn).html(val(result));中使用的那个
  • 为什么不能同时调试服务器端和客户端来查看问题出在哪里?
  • 你确定你正在进入成功功能。那么你确定你在那里得到正确的结果吗?
  • @U10,不,我不是。我可以确认它是错误的。 URL应该是什么。 Service1.svc 是代理吗?
  • 检查您的通讯,使用 Fiddler2 telerik.com/fiddler 之类的东西。您的 Ajax URL 是 relative(相对于托管页面),因此可能根本无法访问您的服务。

标签: jquery asp.net-mvc asp.net-mvc-4


【解决方案1】:

在您的success 函数中,您应该引用result.d 而不仅仅是result。所以应该是这样的:

            $.ajax({
                type: "POST",
                url: webMethod,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (result) {
                    $(divToBeWorkedOn).html(result.d); // Note the .d which contains the actual value
                },
                error: function (e) {
                    $(divToBeWorkedOn).html(e.responseText);
                }
            });

另请参阅 this SO question,了解为什么它必须是 data.d 而不仅仅是 data(或 result 在您的情况下)。

【讨论】:

  • 好吧,我们不知道val 函数没有这样做。
  • 好点。通常不需要额外的val 函数,但问题确实是该函数的作用或调用它的原因。否则,将val() 排除在外,只使用result.d 就可以了。
  • 谢谢。这就是 Val 函数的作用(我应该包括它)。如何查看返回的错误文本:e.responsetext 似乎不起作用。
【解决方案2】:

我将添加我添加的完整代码,因为您不相信我发布的早期代码是正确的。

Imo 在使用 Ajax 时也应该使用 Json。所以我在这里的代码中使用 Json,但你也可以直接返回一个 int(我将把我的 ajax 发送到控制器中的 ActionResult。

控制器:

public ActionResult GetJson()
{
     return Json(1);
}

HTML:

<div id="div1" style="padding: 5px;"><h2></h2></div>
<button>Click me!</button>

脚本:

<script type='text/javascript'>
        $(document).ready(function () {
            $("button").click(function(){
                alert('Test');
                $('#div1 h2').text('Hi I am replace');
                var divToBeWorkedOn = "#div1";
                var n1 = 1;
                var n2 = 2;

                $.ajax({
                    type: "POST",
                    url: '@Url.Action("GetJson", "Estimate")',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (result) {
                        $(divToBeWorkedOn).html(result);
                    },
                    error: function (e) {
                        $(divToBeWorkedOn).html(e.responseText);
                    }
                });
            })
        });
    </script>

我真的不知道你想用这个做什么,但是这段代码会做一个 alert('test') 然后将 div 中的文本更改为 '嗨,我被替换了',然后该文本将被替换为返回并放置在结果中的值。并将其放置在 div 中。

点击前:

点击后:

如果我完全误解了你的意思,请写下更多信息,我会尽力帮助你。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    相关资源
    最近更新 更多