【发布时间】:2012-04-10 14:09:39
【问题描述】:
我已经尝试了几乎所有我能想到的方法,但我仍然遇到我对 WCF 服务的 ajax 调用的问题。
我的 WCF 服务有如下方法:
//[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method = "POST")]
[WebGet]
public string Test(int value)
{
return string.Format("You entered: {0}", value);
}
正如Twitter by Patrick Thomas 所述,我也尝试过使用[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped)] 和[WebGet(BodyStyle = WebMessageBodyStyle.WrappedResponse)],但没有成功。
配置如下:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="RestEndpoint">
<enableWebScript/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="NoSecurityRestBinding" crossDomainScriptAccessEnabled="true">
<security mode="None" />
</binding>
</webHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="WebServices.TestService">
<endpoint address="" binding="webHttpBinding" contract="WebServices.ITestService" bindingConfiguration="NoSecurityRestBinding" behaviorConfiguration="RestEndpoint" />
</service>
</services>
</system.serviceModel>
该服务位于不同的域中,因此我将数据格式化为 JSONP:
$.ajax({
cache: false,
async: true,
type: "GET", // Was "POST"
dataType: "jsonp",
url: "http://mydomain.com/TestService.svc/Test?callback=?",
data: dataToPost,
contentType: "application/json;charset=utf-8",
success: function (msg) {
var testMsg = JSON.parse(msg);
var status = testMsg.TestResult;
alert(status);
},
error: function (msg) {
alert('Please email Jason with this exception: ' + msg.statusText);
}
});
我得到:
“解析错误”
“没有调用jQuery16408722478272714725_1332817261195”
我可能做错了什么?我确实验证了所有 WCF 二进制文件都是 4.0。
提前感谢您的帮助!
【问题讨论】:
-
查看您的服务器响应。它应该类似于:jQuery16408722478272714725_1332817261195({some:json,goes:here});这就是 jQuery 所期待的,但出了点问题。
-
因此,当我检查服务器响应时,我发现它看起来像是 GET 而不是 POST(尽管客户端和服务器端方法指定 POST)并且 URL 看起来像:@ 987654327@
-
另外,IE 返回 200,成功但 Chrome 返回 400,错误请求。两者都有带有 jQuery 回调响应的 parsererror。
-
@Jason N. Gaylord 我很确定你需要使用
msg并申请JSON.parse(msg),然后使用msg.TestResult;获取msg的JSON编码数组中TestResult的值。 -
@Ohgodwhy 我已经更新了上面的代码,但仍然遇到同样的问题。
标签: jquery ajax wcf jsonp parse-error