Php 使用AJAX安全地导入受保护js文件的内容

Php 使用AJAX安全地导入受保护js文件的内容,php,javascript,security,jquery,import,Php,Javascript,Security,Jquery,Import,导入js文件很简单。。。只需使用>script src='file.js'type='text/javascript'>/script> 但是,源代码将显示文件内容的直接url 内容应该是可执行的,但不能使用源url直接查看。 使用AJAX将file.js的内容加载到内存的最佳方式是什么。 我已经找到了以下最初的工作方式(公正和理念,完全有缺陷?) 但我不确定第二次ajax执行是否足以成功调用这些函数。 PHP返回内容,但javascript“ajax成功”可能会将其视为(并存储)变量。。。啊

导入js文件很简单。。。只需使用>script src='file.js'type='text/javascript'>/script>
但是,源代码将显示文件内容的直接url

内容应该是可执行的,但不能使用源url直接查看。
使用AJAX将file.js的内容加载到内存的最佳方式是什么。

我已经找到了以下最初的工作方式(公正和理念,完全有缺陷?)


但我不确定第二次ajax执行是否足以成功调用这些函数。
PHP返回内容,但javascript“ajax成功”可能会将其视为(并存储)变量。。。啊

这个ajax成功的想法会奏效吗??
有人能提出更好的主意吗?


编辑:
根据最初的回答,这种工作方式实际上是不可能的 将通过以“正常”无保护的方式加载常用函数,并使用Jerry的建议(见注释)进行不太频繁的计算来解决此问题。


编辑#2:
下面提到的(耗时的)问题可以通过下一个模板解决。
仍在使用建议的“隐藏PHP代码”方法。
我正在使用缓冲区(或sumthing),比如Youtube视频。。。除了“视频数据”是“来自AJAX-PHP函数的结果”

AJAX request "30 cycle", "60 cycle", "300 cycle", "600 cycle"
     store result to buffer
initiate "start cycle"

function cycle() // run every second !!
{
//do stuff... no AJAX needed
//do some more stuff... like animations and small calculations

//per 30 cycle (30 seconds)
if ($cycle==30)
    {
    perform last "30 cycle" AJAX result [PHP-function set "A"]
    ... when finished: AJAX request "30 cycle"
                            store result to buffer in 'background'
    }

//per 60 cycle (1 minute)
if ($cycle==60)
    {
    perform last "60 cycle" AJAX result [PHP-function set "B"]
    ... when finished: AJAX request "60 cycle"
                            store result to buffer in 'background'
    }

//and so on....
}
初始问题99%已解决(-1,因为开发人员工具)。

感谢您的评论和建议。

即使您将JavaScript文件拆分为许多单独的函数,也只需很少的工作就可以将它们重新组合在一起

使用现代浏览器,即使文件“加载到内存中”,您也可以准确地看到加载的内容

尝试使用浏览器附带的开发工具,您可以使用它们查看何时进行Ajax调用,以及以文本格式加载的内容

如果混合使用PHP和JavaScript,那么在使用JavaScript表示PHP提供的结果时,应该在PHP代码中添加任何敏感内容

编辑:根据您的更新,您可以不执行“循环”操作吗?


函数pollAjax()
{
$.ajax({
--ajax设置--
}).成功(功能(数据){
//对我们的结果做点什么
剂量测定(数据);
//再次激发以获得下一组结果。
setTimeout(函数(){pollAjax()},10);
});
}


这意味着您不太可能在浏览器上挂起1000个挂起的ajax请求—它将请求结果,当它得到结果时,它将请求下一组结果

你想对谁隐藏js?无论您使用何种方法,客户端都可以在控制台中轻松查看。
内容应该是可执行的,但不能使用源url直接查看。
这是行不通的。为了让浏览器能够执行代码,它需要有它。所以每次都会请求文件(函数调用)??如果您不想让代码可见,您需要让ajax在服务器上调用函数并返回结果,而不是将代码加载到浏览器中。您可以做的一件事是在ajax函数的“成功”回调中再次调用ajax调用,而不是使用循环。这样,下一个“循环”一结束,它就会进行下一个“循环”。我可能在寻找网络编码的奇迹:)。唯一的“问题”是每个周期(大约每5秒)调用函数,所以这意味着大量的发送+等待+接收AJAX数据。。。我觉得这有点费时。解决了这个费时的问题。。。请参阅上面主要内容中的编辑#2。我明白了。但假设doSomething(数据)意味着“存储数据以备日后使用”,这难道不意味着“缓冲完整的Youtube视频数据”?我希望它能分步进行,只缓冲需要的东西,即“只缓冲下10秒的视频”。我也不明白你的未决请求。请求只在初始化期间发生(多次,在“启动周期”之前),然后仅在计时器为30、60、90、120等时发生。但可能发生的情况是,您触发一个ajax请求,然后在一秒钟后再触发另一个请求。。第一个可能在第二个之后完成。。所以你的“YouTube数据”会不同步。。如果我理解你的“每秒钟运行一次”?我理解你对一个可能的故障的描述(我可以这样称呼吗?),在编码和测试时会考虑这个问题。我认为,如果出现不同步问题,可以通过暂时暂停周期并显示消息(尽管不是所需)“动画当前暂停以防止数据不同步”来解决,直到数据再次同步。“每秒运行”的意思是“设置间隔(cycle(),1000);”。感谢您的回复,非常感谢。
AJAX request "30 cycle", "60 cycle", "300 cycle", "600 cycle"
     store result to buffer
initiate "start cycle"

function cycle() // run every second !!
{
//do stuff... no AJAX needed
//do some more stuff... like animations and small calculations

//per 30 cycle (30 seconds)
if ($cycle==30)
    {
    perform last "30 cycle" AJAX result [PHP-function set "A"]
    ... when finished: AJAX request "30 cycle"
                            store result to buffer in 'background'
    }

//per 60 cycle (1 minute)
if ($cycle==60)
    {
    perform last "60 cycle" AJAX result [PHP-function set "B"]
    ... when finished: AJAX request "60 cycle"
                            store result to buffer in 'background'
    }

//and so on....
}

function pollAjax()
{
   $.ajax({
      -- ajax settings --
    }).success(function(data) {
        // do something with our results
        doSomething(data);
        // Fire again to get the next set of results. 
        setTimeout(function() {pollAjax()}, 10);
   });
}