这个主题似乎是一个拥有一百万个"解决方案"的主题,结果更加复杂.所以请稍微松一口气,因为我会试着展示发生了什么,我正在使用什么以及我是如何尝试解决这个问题的.
我的测试环境正在运行IIS6 asp.net 2.0,我已经设置好了
'Access-Control-Allow-Origin' *
Run Code Online (Sandbox Code Playgroud)
我还为.asmx扩展设置了动词
"GET,HEAD,POST,DEBUG,OPTIONS"
Run Code Online (Sandbox Code Playgroud)
通过jQuery v1.7.2 ajax()调用我能够从服务器获取xml文件,并POST到基本服务,返回一个带有预期结果跨域的字符串.所以我知道至少部分我的跨域请求正在发挥作用.
当我开始扩展它并使用json将数据发布到服务时,我的问题就出现了
我有一个简单的asmx webservice方法:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public SubResponse HelloWorldX(SubRequestXX SubReq)
{
SubResponse sr = new SubResponse();
sr.resultCode = "777";
sr.resultMsg = "hello - " + SubReq.EmailAddress;
return sr;
}
Run Code Online (Sandbox Code Playgroud)
非常简单,并没有太多魔法发生在那里,我想要做的就是传递'SubRequestXX'对象,现在只需验证它到达那里并做出回应.
Using jQuery:
$.ajax({
type: "POST",
url: "http://somedomain/subscription/MyService.asmx/HelloWorldX",
processData: false,
data: '{ "SubReq" : {"EmailAddress":"user@test.com"} }',
dataType: "json",
contentType: "application/json; charset=utf-8",
cache: false,
success: function(data, textStatus, jqXHR) {
ajaxSucccess3(data, textStatus, jqXHR);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Retrieve Hello …
Run Code Online (Sandbox Code Playgroud)