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

标签 asp.net jquery ajax web-services crossdomain.xml

我的 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/

相关文章:

c# - 有没有办法让asp.net Boundfield成为一个链接?

c# - 动态创建的链接按钮上的单击事件不起作用

jquery - 使用 jQuery 使用另一个 div 中第一张图像的 url 设置 div 的背景图像

javascript - MVC4如何在javascript中将值传递给Html.Partial?

javascript - 通过 ajax 为 flot.js 提供的数据表示未定义

javascript - 在 PythonAnywhere 上的 html 文件中运行脚本

asp.net - httpContext.Response.SubStatusCode 的用途是什么?

ASP.Net WebForms 路由 多个目的地的单一路由

javascript - Jquery Ajax 不适用于 Codeigniter

javascript - 调用页面方法