Jquery的跨域问题

我正在尝试访问另一个域中的webservice,它什么也没有返回。 后来我发现这是一个因跨域访问而导致的问题。

我在网上搜索,有很多文章,但没有像我这样的新手可读。 🙁

有人可以帮我解决如何访问网络服务?

以下是我的代码。

//variables for Add Contacts var addAccountServiceUrl = 'http://crm.eyepax.net/organization.asmx?op=WriteOrg'; // Preferably write this out from server side var OrganizationID=123; var ParentID=123 ; var AccountManagerID="123"; var OrganizationName="Testapple"; var IncorporationNo="23"; var PostAddress="asdfklj asldfj"; var CountryID="LK"; var VisitAddress="asldkf asldkf asldfas dfasdf"; var VisitCountryID="LK"; var VisitSwithboard="242344"; var VisitFax="234234"; var Www="http://www.eyepax.com"; var Active=true; var RegBy=345345345345; var ConfigurationCode="28BC9CC3@BFEBFBFF0001067A"; var Flag=1; var LicenceOrganazationID=1; var sErr; function addContact() { //this is to be commented soon! alert("function called"); //update the webservice soapmesg var soapMessage = ' \  \  \ '+OrganizationID+' \ '+ParentID+' \ '+AccountManagerID+' \ '+OrganizationName+' \ '+IncorporationNo+' \ '+PostAddress+' \ '+CountryID+' \ '+VisitAddress+' \ '+VisitCountryID+' \ '+VisitSwithboard+' \ '+VisitFax+' \ '+Www+' \ '+Active+' \ '+RegBy+' \ '+ConfigurationCode+' \ '+Flag+' \ '+LicenceOrganazationID+' \  \  \ '; $.ajax({ url: addAccountServiceUrl, type: "POST", dataType: "xml", data: soapMessage, success: endAddContact, error: function(jqXHR, textStatus, errorThrown) {alert("failure"); console.log(textStatus);console.log(errorThrown);}, contentType: "text/xml; charset=\"utf-8\"" }); return false; } function endAddContact(xmlHttpRequest, status) { console.log(xmlHttpRequest); console.log(status); alert("webservice called!"); $(xmlHttpRequest.responseXML) .find('WriteOrgResponse') .each(function() { var orgres = $(this).find('WriteOrgResult').text(); var error = $(this).find('vstrError').text(); alert(orgres +' -'+ error); }); var a = $(xmlHttpRequest.responseXML).find('WriteOrgResult'); var b = $(xmlHttpRequest.responseXML).find('vstrError'); console.log("a"+a.text()); console.log("b"+b.text()); } 

浏览器不允许跨域AJAX调用。 仅允许跨域JSONP请求。

要使用JSONP请求,您必须将dataType属性更改为jsonp 。 这意味着您不能请求XML,而只能请求JSONP。


关于JSONP:

标记绕过了跨域限制。 这意味着您可以使用该标记从其他服务器获取数据。 该标记不支持所有类型的语言,因此不支持XML。

JSONP基本上是JSON,但是有一个函数调用它是这样的:

functionname({"property":"value"})

我可以看到你在想:“那个函数在那里做什么?”

这与JSON完全不同。 因为函数是围绕它,你可以使用实际的数据!

   

如果用响应内容替换第二个脚本标记,那么这一切都有意义:

  

信不信由你,但这种微小的差异实际上使我们能够使跨域请求更加安全。

关于JSONP的另一个主题

对于使用Javascript的跨域通信,您需要使用本地代理将请求传递到外部域或使用带有填充的JSON(即JSONP) 。

如果外部站点提供了使用JSONP的可能性,请使用它。 如果没有,请考虑在Web应用程序和远程服务器之间创建代理 。