如何使一个跨域HTTP请求使用JavaScript?
我试图在Dynamics CRM 2011中实现SMS功能。我为此创建了一个自定义活动,并将一个按钮添加到SMS的形式。当按下按钮时,应该发送短信。如何使一个跨域HTTP请求使用JavaScript?
我需要为此做一个http请求并传递一些参数。下面是触发代码:
function send() {
var mygetrequest = new ajaxRequest()
mygetrequest.onreadystatechange = function() {
if (mygetrequest.readyState == 4) {
if (mygetrequest.status == 200 || window.location.href.indexOf("http") == -1) {
//document.getElementById("result").innerHTML = mygetrequest.responseText
alert(mygetrequest.responseText);
}
else {
alert("An error has occured making the request")
}
}
}
var nichandle = "MT-1234";
var hash = "md5";
var passphrase = "[encryptedpassphrase]";
var number = "32497123456";
var content = "testing sms service";
mygetrequest.open("GET", "http://api.smsaction.be/push/?nichandle=" + nichandle + "&hash=" + hash + "&passphrase=" + passphrase + "&number=" + number + "&content=" + content, true)
mygetrequest.send(null)
}
function ajaxRequest() {
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
if (window.ActiveXObject) { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
for (var i = 0; i < activexmodes.length; i++) {
try {
return new ActiveXObject(activexmodes[i])
}
catch (e) {
//suppress error
}
}
}
else if (window.XMLHttpRequest) // if Mozilla, Safari etc
return new XMLHttpRequest()
else
return false
}
我得到的上线“访问被拒绝错误”:
mygetrequest.open("GET", "http://api.smsaction.be/push/?nichandle=" ......
任何帮助表示赞赏。
为了您例如,来自不同领域的错误请求时是:
的XMLHttpRequest无法加载HTTP://api.smsaction.be/push/ nichandle = ?????? & hash = ????? &密码短语= [0127]配对号码= ????????? & content = ???????????????。 Access-Control-Allow-Origin不允许原产地http://server。
对于跨域XMLHttp请求目标服务器必须发送Access-Control-Allow-Origin
响应头。
的检索网站有权批准跨域AJAX请求。通常情况并非如此。
您应该联系smsaction.be或查看他们的常见问题,看看他们是否有任何实施。
通常JSONP用于跨域请求,这必须在两端实现。
解决这个问题的好方法是使用自己的网站作为代理。对您的脚本执行AJAX请求,并让它执行呼叫。在示例PHP中,您可以使用cURL
默认情况下,您的AJAX请求将因相同原始策略而失败。
http://en.wikipedia.org/wiki/Same_origin_policy
现代技术允许CORS(见artilce由Nicholas)http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
jQuery的阿贾克斯允许CORS。
另一种方法是获取内容并动态生成脚本元素,并在head.firstchild上执行insertBefore(请参阅jQuery 1.6.4源代码行号:7833) Google分析代码也有类似的功能。你可能也想看看这个。
干杯.. sree
我不会用这种方法解决这个要求。插件/自定义工作流活动是更合适的恕我直言。 – ccellar