所以我知道这是一个常见的问题,很多人都在谈论它,但觉得我的情况很独特,可能不像其他人那样参与其中。
我有一个主机网站并尝试使用JQ和PhoneGap构建iPhone应用程序。
我希望人们能够从应用程序将他们的分数传递到我的主域,但是我感到害怕: “Access-Control-Allow-Origin不允许使用原点null。” 当我试着这样称呼时:
$.ajax({
type: "POST",
url: 'http://www.homesite.com/thephppage.php',
data: {
'guid': '12333-54',
'score': 52,
'initials': 'tod'
},
success: function (data) {
try {
}
else {
}
}
catch (err) {
alert(err);
}
},
error: function (xhr) {
alert(xhr.responseText);
}
});
由于这是对我所拥有的域名的呼唤,我能做些什么来纠正这个问题?
感谢。 Ť
答案 0 :(得分:5)
您拥有这两个域的事实并未改变ajax请求不能跨域的事实。
由于这是在呼唤我所拥有的域名,我能做些什么来纠正这个问题吗?
是强>
请查看设置CORS,这应该允许您进行这些跨域请求。另外,根据jQuery docs,jQuery应该支持CORS请求 - 主要是
xhrFields (已添加1.5.1)Map要设置fieldName-fieldValue对的映射 在本机XHR对象上。例如,您可以使用它进行设置 如果需要,withCredentials为true,用于跨域请求。
$ .ajax({url:a_cross_domain_url,xhrFields:{ withCredentials:true}});在jQuery 1.5中,withCredentials属性未传播到本机XHR,因此 要求它的CORS请求将忽略此标志。出于这个原因,我们 如果您需要使用它,建议使用jQuery 1.5.1+。
目前,由于Firefox中存在一个bug .getAllResponseHeaders() 尽管.getResponseHeader('Content-Type')返回空字符串 返回非空字符串,自动解码JSON CORS响应 在Firefox中使用jQuery不受支持。
答案 1 :(得分:3)
您必须将crossDomain
更改为true
。
检查jquery ajax api和选项 http://jqapi.com/#p=jQuery.ajax
答案 2 :(得分:2)
为避免从应用中调用其他域名,您可以在主机网站上创建一个页面,将分数注册转发到您的主域。然后,您可以在主机网站上调用此页面。
您可以使用PHP使用HttpRequest::send
例如(不包括用户身份验证):
$url = 'http://mydomain.com/score.php';
$r = new HttpRequest($url, HttpRequest::METH_GET);
$r->addQueryData(array('initials' => $initials, 'score' => $score));
try {
$json = $r->send()->getBody();
// output the response to forward it to the app
echo $json;
} catch (HttpException $ex) {
// handle error
}
答案 3 :(得分:0)
WORKING !!! OH GLORY !!! (有点):这就是我做的......
我没有使用.ajax,而是采用了JSONP路线(有点),并动态地添加了一个标签:
var head = document.getElementsByTagName('head')[0];
script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://thesite.co/thepage.php?var1=123&var2=432&var3='ttt';
head.appendChild(script);
我甚至不必给它一个CALLBACK方法因为(因为我拥有目标站点并且知道它的到来)在我的PHP端,我用这样的methodName包装返回:
$ encoded = json_encode($ json); echo“testMethod(”。$ encoded。“)”; 除了我的DARN iPhone和iPad模拟器外,这种方法非常出色! (天哪,我需要购买真正的设备...)所以我仍然不知道这是否适用于实际设备,但它现在可以在Chrome和Safari中使用...让我希望我能弄明白如何让它在手机上运行!
感谢大家的帮助!
==========第二个更好的移动解决方案======================这比JSONP - 动态脚本解决方案更好。 ..
在你的Phonegap和JQ电话下你的头脑中插入这个标签。
<script type="text/javascript">
$(document).bind("mobileinit", function () {
$.mobile.allowCrossDomainPages = true;
});
</script>
然后在XCODE Resources文件夹的Phonegap.plist文件中,将域添加到外部域...即。 phonegap.com。 (不要使用http或www)。