【问题标题】:backbone.js fetch throwing 500 error on .asmx service.asmx 服务上的主干.js 获取抛出 500 错误
【发布时间】:2015-01-10 17:21:39
【问题描述】:

我遇到的问题似乎与 Backbone.js 创建查询字符串的方式有关。

Backbone 像这样创建查询字符串:

Stats.asmx/GetTarget?domainId=-1&timePeriod=M

这会导致 asmx 服务抛出 500 错误。

如果我将查询字符串更改为:

Stats.asmx/GetTarget?domainId="-1"&timePeriod="M"

它按预期工作。这是我正在使用的代码,由于在查询字符串参数周围没有引号,它会产生 500 错误:

var params = {
            domainId: "-1",
            timePeriod: "M"
    };
    var targetData = new Targets();
    targetData.fetch({
        data: params,
        dataType: "json",
        contentType: "application/json; charset=utf-8"
});

我知道我可以编写一个自定义函数来按照我想要的方式格式化查询字符串,但是有没有办法使用 Backbone.js 在查询字符串中添加“”?

编辑:

这就是我写自定义函数的意思。

在集合中添加:

domainId: "",    
timePeriod: "",
urlRoot: "Stats.asmx/GetTarget",
url: function() {
    return this.urlRoot + "?" + "domainId=\"" + this.domainId + "\"" + "&"
        + "timePeriod=\"" + this.timePeriod + "\"";
},

然后:

var targetData = new Targets();
targetData.domainId = "-1";
targetData.timePeriod = "M";
targetData.fetch({
    dataType: "json",
    contentType: "application/json; charset=utf-8"

但我确信有更好的方法来做到这一点。

【问题讨论】:

    标签: javascript web-services backbone.js asmx


    【解决方案1】:

    您不需要修改 url,因为我认为您的参数会改变。请尝试使用$.param

    targetData.fetch({
        data: $.param(params), // <-- here is the change
        dataType: "json",
        contentType: "application/json; charset=utf-8"
    });
    

    这就是 $.param 的作用:

    > $.param({page:1,filter:2})
    "page=1&filter=2"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多