如何不将我的源代码复制到其他服务器并向它们提供 JS 或 iframe,就像分析和 statcounter 为我们提供的那样?
我用 JS 写了一个 PHP 脚本,它的基本描述是这样的: 当有人访问我的网站时,获取一个具有唯一标识值的 cookie,同时使用 AJAX 我进行一些检查,并将相同的值相应地保存到 mysql。此后,如果他再次访问我的网站,(在大多数情况下)不会再次创建 cookie。
深度:
cookie 值是用 JS 创建的,我想保留它以备将来增强。
我的代码(index.php,add-to-mysql.php)有 JS 和 PHP。
我想在我的其他域中使用此脚本,其中一些域位于不同的服务器中。 但是我不想把我所有的源文件都放到那里。
对我来说,理想的做法是为他们提供 JS 代码,就像 google analytics 或 statcounter 给我们(或其他类似方式)一样,一个 iframe ......像这样的解决方案。
当访问者进入他们的页面时,我在远程服务器(我的服务器)中的 mySQL 将被更新,并且将在他们的站点上创建一个 cookie。来回传输数据。
这有可能实现吗?如果是,我如何开始为此学习?你能给我一些指导吗?
谢谢。
这是一个代码块,ajax 函数将随机数发布到我进行一些操作的 add-to-mysql.php 文件
$.ajax({
type: 'POST',
url: 'add-to-mysql.php',
data: { one: hash }, //an antikatastiso to hash me to a ke kano to md5 meso php sto ajax vgenei to idio
success: function(data) {
alert("success! X: " + data);
}
});
最佳答案
在我看来,您在这里有三个选择。
1.使用 JSONP
JSONP 允许您进行跨域 ajax 调用,这样您就可以从其他域调用您的家庭服务器而不会受到阻碍。 这可能是我想的最简单的路线。
请参阅此处快速了解 JSONP 的工作原理:
https://stackoverflow.com/a/2067584/867294
jQuery 支持 jsonp,所以上手不难:
http://learn.jquery.com/ajax/working-with-jsonp/
JSONP 的工作原理是动态地将脚本添加到文档中,然后调用回调。
javascript 文件的内容需要由服务器生成,您的 PHP 文件 add-to-mysql.php 必须回显如下内容:
<?= htmlspecialchars($_GET["callback"]) =>('someData you want to return');
您也可以通过 $_GET 数组访问从 jQuery 传入的 one: 参数,因为这只是一个 GET 请求。
从客户端你可以这样调用这个路由: 请注意,这将始终是一个 GET 请求,所有参数都将通过 URL。 'callback' 参数是这里的连接因素,它确保 PHP 端知道要生成什么 JavaScript 函数。
$.ajax({
jsonp: 'callback',
dataType: "jsonp",
url: 'http://my-server.com/add-to-mysql.php',
data: { one: hash }, //an antikatastiso to hash me to a ke kano to md5 meso php sto ajax vgenei to idio
success: function(data) {
alert("success! X: " + data);
}
});
<强>2。使用 CORS
CORS 将允许您对不同的域进行 ajax 调用,而不是运行 JS 的域。但是,这确实需要您从服务 html 页面发送特殊的 http header ,因此这确实需要您修改服务器。
查看这里有关 CORS 的快速介绍:
http://www.html5rocks.com/en/tutorials/cors/
简而言之,您需要从服务 html 页面设置的标题是:
Access-Control-Allow-Origin: http://domain.com
Access-Control-Expose-Headers: list,of,headers
3.发布到 iFrame
通过隐藏的 iFrame 发布也是一种选择。
为此,您需要将 form 的 target 设置为 iframe 的 name,这里的优点是您也可以使用 POST 。您也可以通过 jQuery 提交和填充表单。
$('#one_input').val('someHash');
$('#myForm').submit();
如果您不想在页面上显示,可以将所有内容放在隐藏的 div 中:
<div style='display:none;'>
<form id="myForm" action="http://my-server.com/add-to-mysql.php" method="post" target="my_iframe">
<input type="input" id="one_input" value="" />
</form>
<iframe name="my_iframe" ></iframe>
</div>
如果您不需要任何反馈,也可以使用您的参数设置 iframe 的 url。
var hash = 'stuff';
document.getElementId('one_input').src="http://my-server.com/add-to-mysql.php?one=" + hash;
额外
您也可以将 iframe 与 Window.postMessage 一起使用
以前面的例子为基础:
$('#my_iframe')[0].contentWindow.postMessage('hash', 'my-server.com');
但这要求您已经在 iframe 中加载了一个页面,然后该页面将通过 JavaScript 接收消息,所以我认为这不是您要寻找的。
强>关于javascript - 向其他网页提供 JS 或 iframe 之类的分析和 statcounter 以远程运行我的 PHP + JS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106021/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=
出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
我是Ruby和这个网站的新手。下面两个函数是不同的,一个在函数外修改变量,一个不修改。defm1(x)x我想确保我理解正确-当调用m1时,对str的引用被复制并传递给将其视为x的函数。运算符当调用m2时,对str的引用被复制并传递给将其视为x的函数。运算符+创建一个新字符串,赋值x=x+"4"只是将x重定向到新字符串,而原始str变量保持不变。对吧?谢谢 最佳答案 String#+::str+other_str→new_strConcatenation—ReturnsanewStringcontainingother_strconc