2

我正在尝试发出跨域请求以发送/接收一些数据。object error我过不去 在我收到No Transport错误但添加Query.support.cors = true;解决了这个问题之前。

var url = "http://CROSSDOMAINSERVER:PORT/Service1.svc/GetDataUsingDataContract";
            $.ajax({
                type: 'GET',
                url: url,
                data: 'tool=1&product=Some%20Product&details=9&bogus=should%20not%20pass%20validation', 
                datatype: "jsonp",
                contentType: "application/json",
                success: function (response) {
                    alert(response.data);
                },
                error: function (error) {
                    alert(error.statusText);
                }
            });

如果我在浏览器中输入网址:

 http://CROSSDOMAINSERVER:PORT/Service1.svc/GetDataUsingDataContract?&tool=1&product=Some%20Product&details=9&bogus=should%20not%20pass%20validation

我得到了正确的回应。

{"d":{"__type":"ClientSideData:#ProdResourceToolService","details":"9","product":"Some Product","result":"1","site":"Somewhere, SD","systime":"2\/6\/2013 2:50:20 PM","team":"0000000000","tool":"1","user":"username"}}

当我使用 ajax 时,它不会将其提交到数据库或返回数据,只是object error. 有人对如何解决这个问题有任何建议吗?

我还应该指定是否在本地调试时删除我http://CROSSDOMAINSERVER:PORT/得到var url正确的 json 响应。为什么跨域不起作用?

4

1 回答 1

3

这是您当前的回复:

{
    "d": {
        "__type": "ClientSideData:#ProdResourceToolService",
        "details": "9",
        "product": "Some Product",
        "result": "1",
        "site": "Somewhere, SD",
        "systime": "2/6/2013 2:50:20 PM",
        "team": "0000000000",
        "tool": "1",
        "user": "username"
    }
}

这是一个有效的JSON字符串。但是,它不是有效的JSONP。如果可能,让您的服务将 json 包装在一个函数中:

responseFunc({
    "d": {
        "__type": "ClientSideData:#ProdResourceToolService",
        "details": "9",
        "product": "Some Product",
        "result": "1",
        "site": "Somewhere, SD",
        "systime": "2/6/2013 2:50:20 PM",
        "team": "0000000000",
        "tool": "1",
        "user": "username"
    }
});

在您的$.ajax()通话中,添加一个属性:jsonpCallback: 'responseFunc'.

另外,我建议将其data作为对象传递:

data: { tool: 1, product: 'Some Product' } //etc...

如果您可以从服务器端访问服务而没有任何问题,您可以创建一个 httphandler(例如 .ashx)并让它为您生成 JSON。这样您就不必在客户端处理跨域问题。

于 2013-02-06T21:18:06.083 回答