我正在尝试访问另一个域中的Web服务,但它不返回任何内容。后来我发现这是一个跨域访问的问题。
我在网上搜索了很多文章,但像我这样的新手都看不懂。:(
有人可以帮助我如何访问Web服务吗?
以下是我的代码。
//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 =
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> \
<soap:Body> \
<WriteOrg xmlns="http://eyepax.crm.com/Organization"> \
<OrganizationID>'+OrganizationID+'</OrganizationID> \
<ParentID>'+ParentID+'</ParentID> \
<AccountManagerID>'+AccountManagerID+'</AccountManagerID> \
<OrganizationName>'+OrganizationName+'</OrganizationName> \
<IncorporationNo>'+IncorporationNo+'</IncorporationNo> \
<PostAddress>'+PostAddress+'</PostAddress> \
<CountryID>'+CountryID+'</CountryID> \
<VisitAddress>'+VisitAddress+'</VisitAddress> \
<VisitCountryID>'+VisitCountryID+'</VisitCountryID> \
<VisitSwithboard>'+VisitSwithboard+'</VisitSwithboard> \
<VisitFax>'+VisitFax+'</VisitFax> \
<Www>'+Www+'</Www> \
<Active>'+Active+'</Active> \
<RegBy>'+RegBy+'</RegBy> \
<ConfigurationCode>'+ConfigurationCode+'</ConfigurationCode> \
<Flag>'+Flag+'</Flag> \
<LicenceOrganazationID>'+LicenceOrganazationID+'</LicenceOrganazationID> \
</WriteOrg> \
</soap:Body> \
</soap:Envelope>';
$.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的一些知识:
该<script>
标签绕过跨域限制。这意味着您可以使用该标签从其他服务器获取数据。该标记不支持所有类型的语言,因此不支持XML。
JSONP本质上是JSON,但是围绕着它的函数调用是这样的:
functionname({"property":"value"})
我可以看到您在想:“那个函数名在那里做什么?”
这与JSON完全不同。由于该函数包装在其中,因此您可以使用实际数据!
<script type="text/javascript">
var functionname = function(json) {
alert(json.property);
}
</script>
<script type="text/javascript" src="http://www.domain.com/jsonp"></script>
如果您将第二个脚本标签替换为响应内容,则将很有意义:
<script type="text/javascript">
var functionname = function(json) {
alert(json.property);
}
functionname({"property":"value"});
</script>
信不信由你,但是这种微小的差异实际上使我们能够更安全地进行跨域请求。
问题内容: 这是两个页面,test.php和testserver.php。 test.php testserver.php 现在我的问题是:当这两个文件都在同一服务器上(本地主机或Web服务器)时,它可以工作并被调用;如果它在不同的服务器上,则意味着Web服务器上的testserver.php和localhost上的test.php,它不起作用,并且正在执行。即使ajax内的URL更改为http:
问题内容: 对于一个项目,我需要获取其他不同域的网页的源代码。我尝试了以下代码: 我仍然没有得到任何结果,只是一个空白的警告框。 问题答案: 默认情况下,所有浏览器都限制跨域请求,您可以使用YQL作为代理来解决此问题。在此处查看指南:http://ajaxian.com/archives/using-yql-as-a- proxy-for-cross-domain-ajax
平时被问到最多的问题还是关于跨域的,其实跨域问题真的不是一个很难解决的问题。这里我来简单总结一下我推荐的几种跨域解决方案。 我最推荐的也是我工作中在使用的方式就是: cors 全称为 Cross Origin Resource Sharing(跨域资源共享)。这种方案对于前端来说没有什么工作量,和正常发送请求写法上没有任何区别,工作量基本都在后端这里。每一次请求,浏览器必须先以 OPTIONS 请
问题内容: 我正在尝试从jQuery客户端访问wcf服务 具体来说,此示例 http://www.codeproject.com/KB/aspnet/WCF_JQUERY_ASMX.aspx#4 当客户端网页与服务位于同一域时,所有方法都可以正常工作 一旦我将客户端网页移到另一个域,它就会中断。无法到达服务,请求失败 所有示例(ASMX,REST和WCF)都会发生这种情况 任何想法如何使这个跨岛工
问题内容: 这是两个页面,test.php和testserver.php。 test.php testserver.php 现在我的问题是:当这两个文件都在同一服务器上(本地主机或Web服务器)时,它可以工作并被调用;如果它在不同的服务器上,则意味着Web服务器上的testserver.php和localhost上的test.php,它不起作用,并且正在执行。即使ajax内的URL更改为http:
问题内容: 我看到了一些使用Ajax进行跨域的示例,但是它不起作用。 我尝试使用chrome并给出以下错误: 问题答案: 您无法使用,因为它会进行ajax调用,该调用将是跨源的,因此被Same Origin Policy 阻止,并且您尝试访问的Twitter API不支持跨源资源共享(或者如果它支持,允许,它不允许原点或,这是我尝试过的)。 该API确实支持JSONP(这不是真正的Ajax调用),