gpt4 book ai didi

asp.net - Jquery Ajax Web服务和跨域问题

转载 作者:行者123 更新时间:2023-12-01 03:26:16 24 4
gpt4 key购买 nike

我的 Jqueryajax 调用遇到问题,该调用将通过跨域消耗我的 Web 服务方法之一。我一直在尝试所有可能的方法来完成但仍然没有成功。请帮助我解决我做错的事情。我可能需要为某些安全设置配置网络服务器吗?下面是我的代码。如果您对我的代码有任何疑问,请告诉我。

//Using Ajax Post
//Webservice will return JSON Format
//Doesn't work in both FF and IE when host to live server , work in local
//Error : Access is denined in xxxx.js in IE
//Http 403 Forbidden in FF , FF request header is OPTION
//this approach is the simplest and best way for me to use


var myID = $("myID").val();
$.ajax({
type: "POST",
url: "http://www.mywebsite.com/webservice/Webservice.asmx/getInfo",
data: "{myID:'"+ myID + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {

Dostuff(data);
},

error: FailureCallBack

});

我的网络服务将如下所示

using System.Web.Script.Services;
[WebService(Namespace = "http://www.mywebsite.com/webservice/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class Webservice : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object getInfo(string myID)
{
//Do stuff here
return getJSONDataFromDataSet(_DS);
}


}

 

//second Approch <br/>
//Using Ajax GET , webservice will return XML Format <br/>
//Doesn't work in both FF and IE when host to live <br/>
//Error : Access is denined in xxxx.js in IE <br/>
//returning XML data in FF but showing nothing in page <br/>

var myID = $("myID").val();
$.ajax({

type: "GET",

url: "http://www.mywebsite.com/webservice/Webservice.asmx/getInfo?myID="myID"&callback=?",

success: function(data) {

Dostuff(data);
},

error: FailureCallBack

});

网络服务

public SerializableDictionary<string, object> getInfo(string myID)
{
//Do stuff here
SerializableDictionary<string, object> obj = getJSONFromDataTable(_DS);
return obj;
}

 

//third Approch
//Using normal GET , webservice will return XML Format
//same problem with second approch



var myID = $("myID").val();
var xmlhttprequest = createRequestObject();
var url = 'http://www.mywebsite.com/webservice/Webservice.asmx/getInfo?myID='myID'';
xmlhttprequest.open("GET", url, true);
xmlhttprequest.onreadystatechange = getData;
xmlhttprequest.send(null);
function getData()
{
if ((xmlhttprequest.readyState == 4) &&( xmlhttprequest.status == 200))
{
var myXml = xmlhttprequest.responseXML;
Dostuff(myXml);
}
}
function createRequestObject()
{
if (window.XMLHttpRequest)
{
return xmlhttprequest = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
return xmlhttprequest = new ActiveXObject("Microsoft.XMLHTTP");
}
}

Webservice 与第二种方法相同

编辑:现在我收到访问被拒绝,IE 中 POST 和 GET 请求的 javascript 错误。在 fiddler 中,我可以看到 Firefox 返回 Xml 数据,但页面中没有显示任何内容,所以我在 getData 中放置了一个警报框函数中,myXml 变量值始终为 null,奇怪的是我只放了 1 个警报框,它显示警报 3 次。下面是我的代码

  var myID = $("myID").val();
var xmlhttprequest = createRequestObject();
var encodeUrl = escape(_utf8_encode("http://www.mywebsite.com/webservice/Webservice.asmx/getInfo?myID="myID));
var url = 'http://www.mywebsite.com/webservice/proxy.aspx?url='+encodeUrl;
xmlhttprequest.open("GET", url, true); //**ACCESS IS DENIED HERE in this line!!!!**
xmlhttprequest.onreadystatechange = getData;
xmlhttprequest.send(null);


function getData()
{
var myXml = xmlhttprequest.responseXML;
alert(myXml); //ALWAYS NULL and show alert 3 times????
DoStuff(myXml);
}

请帮忙。最好的问候

最佳答案

出于安全原因,ajax 请求无法跨域工作。有两种解决方案。

  1. 向同一服务器发出请求,然后使用基于服务器的代理机制向其他域发出请求。

  2. 使用“JSONP”,这是发出类似 ajax 请求的另一种交叉方式。 jQuery 通过 dataType: jsonp 而不是 json 支持这一点,并且通过他们的 api 文档有进一步的解释。此博客条目可能有用 - http://bloggingabout.net/blogs/adelkhalil/archive/2009/08/14/cross-domain-jsonp-with-jquery-call-step-by-step-guide.aspx

关于asp.net - Jquery Ajax Web服务和跨域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4834942/

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