javascript - 向其他网页提供 JS 或 iframe 之类的分析和 statcounter 以远程运行我的 PHP + JS 脚本

标签 javascript php jquery mysql

如何不将我的源代码复制到其他服务器并向它们提供 JS 或 iframe,就像分析和 statcounter 为我们提供的那样?

我用 JS 写了一个 PHP 脚本,它的基本描述是这样的: 当有人访问我的网站时,获取一个具有唯一标识值的 cookie,同时使用 AJAX 我进行一些检查,并将相同的值相应地保存到 mysql。此后,如果他再次访问我的网站,(在大多数情况下)不会再次创建 cookie。

深度:

cookie 值是用 JS 创建的,我想保留它以备将来增强。

我的代码(index.phpadd-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 发布也是一种选择。 为此,您需要将 formtarget 设置为 iframename,这里的优点是您也可以使用 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/

相关文章:

php - 在javascript函数中设置变量

javascript - Node JS + Express : Render subviews in a main view

javascript - 使用 javascript 或 jquery 进行价格字段验证?

javascript - jQuery fadeOut 有效,fadeIn 没有错误,没有变化,同样 fadeToggle 也不会回来

javascript - 使用 Javascript 使 "Un-ordered list"表现得像 "ordered list"

javascript - Wordpress + Ajax 更新记录不起作用

PHP脚本将MySQL数据返回到表中,需要回车

php - 在Android中解密Base64加密图像

php - 在 $_POST 变量中设置值以通过 Codeigniter 验证

javascript - Backbone.js:根据点击事件过滤集合