javascript - 语法错误: Invalid character in jQuery $. ajax调用在哪里?

标签 javascript jquery ajax wcf

我有以下 jQuery 调用 WCF 方法的部分。方法调用成功,我可以看到它正在记录,并且它确实返回 bool 值true。但是,错误处理程序返回“AJAX 调用在 CallIsDataReady 中失败”和“语法错误:无效字符”。然后它不会采取成功路径调用callUpdateGrid。我找不到无效字符。救命!

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 {
                        console.log("data returned - calling callUpDateGrid");
                        //Continue as data is ready
                        callUpdateGrid(input);
                    }
                },
                error: function (jqXHR, textStatus, errThrown) {
                    console.log("AJAX call failed in CallIsDataReady");
                    console.log(errThrown);
                }
            });
        }

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

            CallIsDataReady(input);

        });

服务器端方法返回 JSON,因为它是启用 AJAX 的 Web 服务:

[OperationContract]
        [WebGet]
        public bool IsDataReady(string requestGUID)
        {
            bool isReady = Global.publicDataDictionary.Keys.Contains(requestGUID);

            using (savitasEntities2 db = new savitasEntities2())
            {
                DataRequestLog drl = new DataRequestLog();
                drl.registrationID = "";
                drl.request = "Is Ready=" + isReady;
                drl.connectionID = "";
                drl.created = System.DateTime.Now.ToUniversalTime();
                drl.direction = "tickler";
                drl.dataRequestGUID = requestGUID;
                db.DataRequestLogs.Add(drl);
                db.SaveChanges();
            }

            return isReady;
        }

编辑:第二个 JavaScript 方法是:

 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();
                },
                error: function (jqXHR, textStatus, errThrown) {
                    console.log("AJAX call failed in callUpdateGrid");
                    console.log(errThrown);
                }
            });
        }

最佳答案

虽然您的代码已经可以运行,但您仍然应该考虑这些事情。我不是 JavaScript 专家,但我相信您调用方法的方式是不正确的。首先,您的 OperationContractWebGet,因此您不需要在请求中提供 Content-Type。当您使用POST方法发送大量数据时,通常使用Content-Type。因此,根据我的说法,更改以下内容:

[OperationContract]
[WebGet(UriTemplate = "/GUID={requestGUID}", ResponseFormat = WebMessageFormat.Json)]
public bool IsDataReady(string requestGUID)
{
    bool isReady = Global.publicDataDictionary.Keys.Contains(requestGUID);
    using (savitasEntities2 db = new savitasEntities2())
    {
        DataRequestLog drl = new DataRequestLog();
        drl.registrationID = "";
        drl.request = "Is Ready=" + isReady;
        drl.connectionID = "";
        drl.created = System.DateTime.Now.ToUniversalTime();
        drl.direction = "tickler";
        drl.dataRequestGUID = requestGUID;
        db.DataRequestLogs.Add(drl);
        db.SaveChanges();
    }
    return isReady;
}

我希望这一定会成功。现在此方法将以 JSON 格式返回 isReady。如果您未在 OperationContract 中指定 ResponseFormat,则默认情况下它将返回为 XML

现在尝试删除 Content-Type: application/json; charset=utf-8 因为您没有以 JSON 格式发送数据并执行您的方法。响应将采用 JSON 格式,因此,您必须解析它才能获取 isReady 值。

使用此 URL 调用服务:

url: "http://www.blah.com/services/TestsService.svc/GUID=abc123"

这很简单且易于实现。感谢您的耐心等待。

编辑:在您的OperatcionContract中添加BodyStyle = WebMessageBodyStyle.Bare

关于javascript - 语法错误: Invalid character in jQuery $. ajax调用在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22515905/

相关文章:

php - 根据具有多个连接的最新日期选择行 -Code Ignitor

javascript - 确定当前是否正在左键单击按钮(按住单击)?

javascript - babel 编译的 ES6 中的 block 作用域

javascript - 当窗口大小调整到 480px 以下时调用函数

jQuery 无法获取 UL 元素的自定义属性

javascript - AWS Lambda 无法通过 AJAX 工作

jquery - 使用ajax jquery下载页面内容

javascript - 如何制作圆形 map ?使用谷歌地图

javascript - 使用jquery在javascript变量中复制html div

javascript - $event.stopPropagation() 运行但父事件仍然执行