【问题标题】:jQuery .ajax call never calling methodjQuery .ajax 调用从不调用方法
【发布时间】:2014-03-20 01:45:38
【问题描述】:

在这个SO post 中,我学习了如何从 AJAX 调用中获取返回值:

function CallIsDataReady(input) {
            $.ajax({
                url: "http://www.blah.com/services/TestsService.svc/IsDataReady",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                data: input,
                dataType: "json",
                success: function (data) {
                    if (!data) {
                        setTimeout(function (inputInner) { CallIsDataReady(inputInner); }, 1000);
                    }
                    else {
                        //Continue as data is ready
                        callUpdateGrid(input);
                    }
                }
            });
        }

        $(document).ready(function () {
            var input = { requestGUID: "<%=guid %>" };

            CallIsDataReady(input);

        });

这个函数调用它的 web 服务并返回 true。问题是在下面的 callUpdateGrid 中,日志显示没有从 $.ajax 调用中调用该 Web 服务方法:

function callUpdateGrid(input) {
    console.log(input);
    $.ajax({
        url: "http://www.blah.com/services/TestsService.svc/GetContactsDataAndCountbyGUID",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        data: input,
        dataType: "json",
        success: function (data) {
            var mtv = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                        console.log(data);
                        mtv.set_dataSource(data.d.Data);
                        mtv.dataBind();
                    }
    });
}

有人知道怎么回事吗?

【问题讨论】:

  • 在顶部函数中,您有callUpdateGrid(input) - 那不应该是callUpdateGrid(data) 吗??
  • 数据不是第一次调用返回的真假值吗?
  • 是的,我正在调用函数 else { //继续,因为数据准备好了 callUpdateGrid(input); }
  • 好吧,您将不得不使用开发人员控制台来准确了解正在发生的 HTTP 事务以及响应的样子。您还没有描述 console.log() 调用实际打印的内容,或者如果您有,我看不到它。

标签: javascript jquery ajax wcf


【解决方案1】:

总是将错误处理函数作为传递给 $.ajax 的选项之一包含在内是一个好主意。例如,在您的成功函数之后添加此代码:

    ,
    error: function(jqXHR, textStatus, errThrown) {
        console.log("AJAX call failed");
        console.log(errThrown);
    }

如果 $.ajax 调用不成功,这将至少记录一些信息。

编辑 根据您的评论,此日志 SyntaxError: Invalid character

事实上,我现在看到您将一个纯 JavaScript 对象作为传递给 $.ajax 的 data 选项,但在 dataType 字段中表明它是一个 JSON 对象。您需要自己将输入对象实际转换为 JSON,如下所示:

    data: JSON.stringify(input),
    dataType: 'json',

或者,您可以简单地将 input 格式化为 JSON 对象,如下所示:

var input = { "requestGUID": "<%=guid %>" };

在这种情况下,字段名称 requestGUID 周围的引号足以为您提供 JSON 对象。

【讨论】:

  • AJAX 调用失败 SyntaxError: Invalid character That is in CallDataIsReady
  • 它必须在 callUpdateGrid 上,因为日志记录确认第一个 Web 调用被调用并且成功为 true。
  • 我改成 var input = { "requestGUID": "" };我得到了同样的错误
  • 我遇到了同样的错误,它一直在调用第二个函数
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多