backbone.js在.asmx服务上获取抛出500错误

时间:2015-01-10 17:21:40

标签: javascript web-services backbone.js asmx

我遇到的问题似乎与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"

但我相信有更好的方法可以做到。

1 个答案:

答案 0 :(得分:0)

您不需要修改网址,因为我认为您的参数会发生变化。请尝试使用 $.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"