我正在尝试发送跨域请求来发送/接收一些数据。我无法超越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响应。为什么跨域不起作用?
答案 0 :(得分: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。那么你就不必在客户端处理跨域问题了。