使用.ajax(JQuery)跨域问题到我拥有的域 – 简单的PHP页面

所以我知道这是一个普遍的问题,看到很多人都在谈论它,但觉得我的情况是独一无二的,可能不像其他人那样参与其中。

我有一个主机网站,并试图用JQ和PhoneGap构建一个iPhone应用程序。

我希望人们能够从应用程序将他们的分数传递到我的主域,但是我感到害怕:“Access-Control-Allow-Origin不允许使用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); } }); 

由于这是对我所拥有的域名的呼唤,我能做些什么来纠正这个问题?

谢谢。 Ť

您拥有这两个域的事实并未改变ajax请求不能跨域的事实。

由于这是对我所拥有的域名的呼唤,我能做些什么来纠正这个问题?

看一下设置CORS ,它应该允许你做出这些跨域请求。 另外,根据jQuery文档 ,jQuery应该主要支持CORS请求

xhrFields (已添加1.5.1)Map要在本机XHR对象上设置的fieldName-fieldValue对的映射。 例如,如果需要,您可以使用它将withCredentials设置为true以用于跨域请求。

$ .ajax({url:a_cross_domain_url,xhrFields:{withCredentials:true}}); 在jQuery 1.5中,withCredentials属性未传播到本机XHR,因此需要它的CORS请求将忽略此标志。 出于这个原因,如果您需要使用它,我们建议使用jQuery 1.5.1+。


目前,由于Firefox中的一个错误,.getAllResponseHeaders()返回空字符串,尽管.getResponseHeader(’Content-Type’)返回非空字符串,不支持在Firefox中使用jQuery自动解码JSON CORS响应。

您必须将crossDomain更改为true

检查jquery ajax api和选项http://jqapi.com/#p=jQuery.ajax

为避免从应用程序调用其他域,您可以在主机网站上创建一个页面,将分数注册转发到您的主域。 然后,您可以在主机网站上调用此页面。

您可以使用PHP使用HttpRequest::send转发数据

例如(不包括用户身份validation):

 $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 } 

工作! 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模拟器之外,这个function非常出色!!! (天哪,我需要购买真正的设备…)所以我仍然不知道这是否适用于实际的设备,但它现在可以在Chrome和Safari中使用…希望我能弄明白如何让它在手机上运行!

感谢大家的帮助!

==========第二个更好的移动解决方案======================这比JSONP更好 – 动态脚本解决方案……

在您的Phonegap和JQ调用下,请插入此标记。

  

然后在XCODE Resources文件夹中的Phonegap.plist文件中,将域添加到外部域…即。 phonegap.com。 (不要使用http或www)。