尝试发布大型JSON数据时出现错误的请求错误

杰森·克拉克(Jason Clark)

首先,我是一名新开发人员,所以如果我遗漏了一些明显的内容,我先向您道歉。

我正在开发一个Web应用程序,以便脱机使用IndexedDB中的大量数据。当用户转到Web应用程序时,客户端将从服务器获取整个数据库,并将其存储在indexeddb中使用。效果很好,但是当我尝试使用post方法将数据(再次记录)发送回WCF时,尝试发送ajax正文参数以及使用时,我得到的方法不允许或请求错误uri参数,它会命中服务器,但并非所有数据都会发送。我认为无效字符可能是一个因素,因此我在javascript中使用了encodeURIComponent方法将无效字符转换为uri参数中的有效字符。我也尝试过使用名为LZString的javascript压缩API压缩数据。我尝试使用XMLHttpRequest(我不完全了解)。

我还使用了一个称为Dexie.js的IndexedDB包装器。

我的代码示例如下。注释了一些代码,但剩下来显示我尝试过的内容。

这就是我在服务器上拥有的..

    [OperationContract]
    [WebInvoke(Method = "POST",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "REST_SendCompletedServiceOrders",
        BodyStyle = WebMessageBodyStyle.Wrapped)]
    [FaultContract(typeof (Exception))]
    bool REST_SendCompletedServiceOrders(string compressedWebData);

这是客户端上用于同步回来的click事件。

$('#syncCompletedData').on('click', function() {

    db.ServiceOrder

        .toArray(function(so) {
            var completedServiceOrders = [];
            for (var i = 0; i < so.length; i++) {
                if (so[i].IsCompleted) {
                    completedServiceOrders.push(so[i]);
                };
            }
            var customerId = sessionStorage.getItem("customerId");
            var companyId = sessionStorage.getItem("companyId");
            var computerId = sessionStorage.getItem("computerId");
            var webData = JSON.stringify({ webCustomerId: customerId, webCompanyId: companyId, webComputerId: computerId, webServiceOrder: completedServiceOrders });
            alert(webData);

            alert("before compression is " + webData.length);

            var URIEncodedWebData = encodeURIComponent(webData);
            var JSONWebData = JSON.stringify(URIEncodedWebData);

        var compressedWebData = LZString.compressToUTF16(JSONWebData);

            alert("after compression is " + compressedWebData.length);
            debugger;

            try {
                $.ajax({
                    type: "POST",
                    url: "MFSRemoteDataService/REST_SendCompletedServiceOrders",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    data: { compressedWebData: compressedWebData },
                    success: function(data) { alert(JSON.stringify(data)); },
                    failure: function(errMsg) {
                        alert(errMsg);
                    }
                });
            } catch (e) {
                alert(e);
            }

        });
});

压缩前的数据长度为7707。压缩后的数据长度为1831。

在此先感谢您的帮助,反馈,批评等。

杰森·克拉克(Jason Clark)

我发现了我的问题。我一直在尝试将字符串传递给contract方法,但我一直收到错误的请求错误。相反,我包装了Json字符串并将其发送到对象,而不是我在服务器上创建的字符串。

我包装了JSON并将其发送到ajax请求的正文中。

var rawWebData = {
            WebCustomerID: customerId,
            WebCompanyID: companyId,
            WebComputerID: computerId,
            WebServiceOrders: completedServiceOrders
        };
        var rawData = { webData: rawWebData };
        var webData = JSON.stringify(rawData);
            try {
                $.ajax({
                    type: "POST",
                    url: "MFSRemoteDataService/REST_SendCompletedServiceOrders",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    traditional: true,
                    data: webData,
                    success: function (data) {
                        alert(JSON.stringify(data));
                    },
                    failure: function (errMsg) {
                        alert(errMsg);
                    }
                });
            } catch (e) {
                alert(e);
            }

        });

然后我创建了一个类来收集数据...

[DataContract]
public class WebServiceOrder
{
    [DataMember]
    public Int32 WebCustomerID { get; set; }

    [DataMember]
    public Int32 WebCompanyID { get; set; }

    [DataMember]
    public Int32 WebComputerID { get; set; }

    [DataMember]
    public virtual List<ServiceOrder> WebServiceOrders { get; set; }

}

然后,我更改了合同方法以接受我创建的对象而不是字符串。WCF反序列化JSON字符串。

        [OperationContract]
    [WebInvoke(Method = "POST",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "REST_SendCompletedServiceOrders",
        BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    [FaultContract(typeof (Exception))]
    bool REST_SendCompletedServiceOrders(WebServiceOrder webData);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试提交表单时出现HTTP发布请求错误

来自分类Dev

尝试发布JSON数据时,为什么在logcat中出现此错误?

来自分类Dev

请求发布数据时出现字典格式错误

来自分类Dev

使用 php 发布 GeoJSON 数据时出现错误请求

来自分类Dev

发布Json对象时出现400(错误请求)

来自分类Dev

当 Flask 收到 POST 请求并尝试将其用作 JSON 数据时出现错误

来自分类Dev

尝试插入json数组时出现数据插入错误?

来自分类Dev

尝试从WebService获取数据时出现“无效的JSON原语”错误

来自分类Dev

当我尝试在节点中执行https发布请求时,出现getaddrinfo ENOTFOUND错误

来自分类Dev

发布JSON时出现JSON错误

来自分类Dev

尝试执行简单的http请求时出现JS错误错误

来自分类Dev

尝试从 DocumentDb 中删除文档时出现错误请求错误

来自分类Dev

尝试将db中的数据发布到网页时出现mysql错误

来自分类Dev

在单元测试中将JSON发布到Flask端点时出现错误请求

来自分类Dev

在openshift上将json发布到Flask时出现400错误请求

来自分类Dev

在测试期间发送发布请求时出现 JSON 解码错误

来自分类Dev

HTTP 状态 400 – 尝试将日期保存到数据库时出现错误请求

来自分类Dev

使用axios发布请求时出现网络错误

来自分类Dev

使用Axios发出发布请求时出现网络错误

来自分类Dev

通过HttpURLConnection张贴JSON数据时出现HTTP错误400错误请求

来自分类Dev

尝试在flutter上获取请求时出现错误

来自分类Dev

尝试POST请求时出现猫鼬验证错误

来自分类Dev

尝试POST请求时出现节点js错误

来自分类Dev

尝试将Json数据解析为Model Class时,使用可编码时出现此错误

来自分类Dev

使用cURL发布数据时出现“位置参数”错误

来自分类Dev

使用Alamofire发布数据时出现SerializationFailure错误

来自分类Dev

解析JSON数据时出现ArrayIndexOutOfBoundsException错误

来自分类Dev

解析错误:尝试解析数据框中的JSON列时出现“ Trailing Garbage”

来自分类Dev

尝试从服务器获取JSON数据时出现一些错误

Related 相关文章

  1. 1

    尝试提交表单时出现HTTP发布请求错误

  2. 2

    尝试发布JSON数据时,为什么在logcat中出现此错误?

  3. 3

    请求发布数据时出现字典格式错误

  4. 4

    使用 php 发布 GeoJSON 数据时出现错误请求

  5. 5

    发布Json对象时出现400(错误请求)

  6. 6

    当 Flask 收到 POST 请求并尝试将其用作 JSON 数据时出现错误

  7. 7

    尝试插入json数组时出现数据插入错误?

  8. 8

    尝试从WebService获取数据时出现“无效的JSON原语”错误

  9. 9

    当我尝试在节点中执行https发布请求时,出现getaddrinfo ENOTFOUND错误

  10. 10

    发布JSON时出现JSON错误

  11. 11

    尝试执行简单的http请求时出现JS错误错误

  12. 12

    尝试从 DocumentDb 中删除文档时出现错误请求错误

  13. 13

    尝试将db中的数据发布到网页时出现mysql错误

  14. 14

    在单元测试中将JSON发布到Flask端点时出现错误请求

  15. 15

    在openshift上将json发布到Flask时出现400错误请求

  16. 16

    在测试期间发送发布请求时出现 JSON 解码错误

  17. 17

    HTTP 状态 400 – 尝试将日期保存到数据库时出现错误请求

  18. 18

    使用axios发布请求时出现网络错误

  19. 19

    使用Axios发出发布请求时出现网络错误

  20. 20

    通过HttpURLConnection张贴JSON数据时出现HTTP错误400错误请求

  21. 21

    尝试在flutter上获取请求时出现错误

  22. 22

    尝试POST请求时出现猫鼬验证错误

  23. 23

    尝试POST请求时出现节点js错误

  24. 24

    尝试将Json数据解析为Model Class时,使用可编码时出现此错误

  25. 25

    使用cURL发布数据时出现“位置参数”错误

  26. 26

    使用Alamofire发布数据时出现SerializationFailure错误

  27. 27

    解析JSON数据时出现ArrayIndexOutOfBoundsException错误

  28. 28

    解析错误:尝试解析数据框中的JSON列时出现“ Trailing Garbage”

  29. 29

    尝试从服务器获取JSON数据时出现一些错误

热门标签

归档