我正在尝试使用$ .get()联系服务器。我不关心回应。我的目的是记录一些用户操作的数据(他们点击的内容等)。当用户点击某些内容时,会调用$ .get,如下所示:
$.get(
"http://www.some-server.com/log.txt?click=1",
function (data)
{
},
"text"
);
服务器处理相应的请求。执行函数时出现以下错误:
XMLHttpRequest cannot load ... is not allowed by Access-Control-Allow-Origin.
如果我将数据类型更改为jsonp,我不会收到该错误但是当jquery回调尝试将日志服务器的响应评估为JSON时,它会告诉我“whatwasreturned”未定义。我无法在日志服务器上更改任何内容。
答案 0 :(得分:6)
改为使用“跟踪像素”技术:
<img src="http://www.some-server.com/log.txt?click=1" height="1" width="1">
只需在需要时将HTML插入DOM即可。
答案 1 :(得分:1)
如果您正在使用jquery,只需添加脚本标记以避免同源策略问题:
$('body').append('<script src="http://www.some-server.com/log.txt?click=1"></script>');
答案 2 :(得分:0)
不确定您是否能够...如果您正在与自己的服务器通信,那么告诉JS将响应视为明文而不是尝试解码它会很简单。但是一旦你正在做JSONP,那么jquery实际上只是构建一个<script src="http://otherserver.com"></script>
块并插入它,这意味着远程服务器必须响应有效的JS代码。
另一种方法是加载包含json p url的图像。图像本身会被“破坏”,但仍然会触发GET请求。
答案 3 :(得分:0)
因为你不能将ajax查询发送到其他域(然后脚本执行),但你发现你可以使用jsonp,但只有当服务器支持它时(服务器基本上包含JSON)并且有方法{{1调用$.getJson(..)
http://api.jquery.com/jQuery.getJSON/
支持jsonp的服务器端(在php中)的示例:http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/
答案 4 :(得分:0)
您可以继续使用JSONP,但让log.txt
返回一个空的JSON对象:{}
。
答案 5 :(得分:0)
您可以使用纯粹的ajax调用:
$.ajax({
url: 'http://www.some-server.com/log.txt?click=1',
dataType: 'jsonp',
crossDomain: true,
success: function(data) { /* do nothing */ }
});