gpt4 book ai didi

javascript - 我有一个 WCF 服务,其 JavaScript 端点仅适用于 IE

转载 作者:行者123 更新时间:2023-11-28 10:16:26 26 4
gpt4 key购买 nike

我有一个带有 webhttpbinding 的远程服务器,我想使用 javascript 访问它。

下面是一个简单的 JavaScript 函数,它执行测试函数,该函数只是一个返回该数字的随机数生成器。

Function DoTest()
{
var xmlHttp = new XMLHttpRequest();


var url = "location/to/service/service.svc/ajax/";
url = url + test;


var body = '{ }';


xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(body);
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState == 4){
alert(xmlHttp.responseText);
}
}
}

当我在 ie9 中执行此函数时,我得到 {d: 6} 或其他任何内容,但是当我尝试在 chrome 或 firefox 5 中执行相同的函数时,它会向我发出警报,但其中没有任何文本。

当我在 ie 中将 xmlHttp.responseText 更改为 xmlHttp.responseXML 时,我得到 [Object],而在 Firefox 5 和 chrome 中,结果为 null。

有人知道我可以做些什么来让它在所有现代浏览器上运行吗?

更新:Fiddler 结果 Chrome :

OPTIONS http://www.address.com/service.svc/ajax/add HTTP/1.1
Host: www.address.com
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30
Access-Control-Request-Headers: Content-Type
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

IE 9

 POST http://www.address.com/service.svc/ajax/add HTTP/1.1
Accept: */*
Content-Type: application/json
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: www.address.com
Content-Length: 17
Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=m54ult1lvdqj0yeb3nm4dz4w
{"x":123,"y":332}

FF:

  OPTIONS http://www.address.com/service.svc/ajax/add HTTP/1.1
Host: www.address.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:7.0a1) Gecko/20110617 Firefox/7.0a1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache

最佳答案

一个可能(可能)的问题是您在 GET 请求中传递请求正文 - 这是 HTTP 规范所不允许的。某些浏览器可能对其他浏览器更宽容,但是一旦修复它(在 GET 请求的查询字符串中传递参数,或更改为使用 POST 传递请求正文),您应该拥有更一致的跨浏览器行为。

更新:添加示例

我从客户端复制了您的代码并创建了一个服务,并且我得到了正确的结果(在多个浏览器上)。您可以尝试使用此代码并开始更改为您的代码,看看它在哪里损坏吗?

Service1.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="SO_6513977.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

IService1.svc:

namespace SO_6513977
{
[ServiceContract]
public interface IService1
{
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
int Add(int x, int y);
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
string Echo(string text);
}
}

Service1.svc.cs:

namespace SO_6513977
{
public class Service1 : IService1
{
public int Add(int x, int y) { return x + y; }
public string Echo(string text) { return text; }
}
}

HtmlPage1.html:

<body>
<script type="text/javascript">
function TestAdd() {
var xmlHttp = new XMLHttpRequest();
var url = "/Service1.svc/Add";
var body = '{"x":123,"y":332}';
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-Type", "application/json");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
alert("Response of Add: " + xmlHttp.responseText);
//TestEcho();
}
};
xmlHttp.send(body);
}

function TestEcho() {
var xmlHttp = new XMLHttpRequest();
var url = "/Service1.svc/Echo";
var body = '{"text":"Hello world"}';
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-Type", "application/json");
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
alert("Response of Echo: " + xmlHttp.responseText);
}
};
xmlHttp.send(body);
}

//TestAdd();
</script>
<input type="button" value="Test Add" onclick="TestAdd();" /><br />
<input type="button" value="Test Echo" onclick="TestEcho();" /><br />
</body>

关于javascript - 我有一个 WCF 服务,其 JavaScript 端点仅适用于 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com