通常在php页面中直接echo js的脚本是可以解析执行的。例如

echo '<script type = text/javascript>alert("hello!");</script>';   

web页面会直接弹出警示窗。但是web页面通过Ajax向php发送http数据请求,返回的有关script语句出于安全原因却不可以直接执行。如果要在网页上执行就要做一些处理。下面就来说一下这个过程。

前端html代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ro">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Ajax tutorial</title><script type="text/javascript" src="script.js"></script></head>
<body><div id="context">
<script type="text/javascript">var tmp = '. date('Y-m-d H:i:s',time()).';document.write("Server Timestamp: "+ tmp);
</script>
</div>
<h4 style="cursor:pointer;" οnclick="ajaxrequest('script.php', 'context')"><u>Test</u></h4></body>
</html>

Ajax部分:

// 根据浏览器创建 XMLHttpRequest 对象。
function get_XmlHttp() {var xmlHttp = null;if(window.XMLHttpRequest) {     //  Forefox, IE7+, Opera, Safari, ...xmlHttp = new XMLHttpRequest();}else if(window.ActiveXObject) {  // for Internet Explorer 5 or 6xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}return xmlHttp;
}// 向php文件发送POST请求,显示接收到的结果
function ajaxrequest(php_file, tagID) {var request =  get_XmlHttp();       request.open("POST", php_file, true);         // adds  a header to tell the PHP script to recognize the data as is sent via POSTrequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");request.send(null);     request.onreadystatechange = function() {if (request.readyState == 4) {var resp = request.responseText;        document.getElementById(tagID).innerHTML = resp;      //document.write(resp);parseScript(resp);}}
}// this function create an Array that contains the JS code of every <script> tag in parameter
// then apply the eval() to execute the code in every script collected
function parseScript(strcode) {var scripts = new Array();      while(strcode.indexOf("<script") > -1 || strcode.indexOf("</script") > -1) {var s = strcode.indexOf("<script");var s_e = strcode.indexOf(">", s);var e = strcode.indexOf("</script", s);var e_e = strcode.indexOf(">", e);// Add to scripts arrayscripts.push(strcode.substring(s_e+1, e));// Strip from strcodestrcode = strcode.substring(0, s) + strcode.substring(e_e+1);}// Loop through every script collected and eval itfor(var i=0; i<scripts.length; i++) {try {eval(scripts[i]);}catch(ex) {}}
}

后端php文件

<?phpecho '<b>Text added with Ajax</b>, <i>received from PHP.</i>';//返回第一个js代码, 显示当前时间戳信息
echo '<script type="text/javascript">var tmp = '. time().';alert("Server Timestamp: "+ tmp);</script>';//返回第二个js代码,输出提示信息
echo '<script type="text/javascript">alert("The alert from the second JS script from PHP");</script>';
?>

Ajax执行向php请求的js脚本相关推荐

  1. ajax 跨域请求数据,JQuery Ajax执行跨域请求数据的解决方案

    JQuery Ajax执行跨域请求数据的解决方案 今天前端因为需要ajax调用两个不同的项目,请求域不一样,所以涉及ajax跨域的问题 ,其实很简单,具体如下 原来的ajax请求如下: $.ajax( ...

  2. html中body末尾的script,【笔记】JS脚本为什么要放在body最后面以及async和defer的异同点...

    1.没有defer或async 浏览器遇到脚本的时候会暂停渲染并立即加载执行脚本(外部脚本),"立即"指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的 ...

  3. ajax请求必须打断点才能成功,Jquery等待ajax执行完毕继续执行(断点调试正常,运行异常)...

    以前写过一个程序,发现用断点调试的时候,一步步的运行,程序是可以的,但是去了断点程序就出现了问题. $(document).ready(function(){ var arra=new Array() ...

  4. 请求异步js,请求完成后执行代码

    要确定请求完成 js 文件,才执行相关的代码. 场景,引用了百度地图的 js-sdk, 需要实例化 SDK 对象,但是这个引用加载JS-SDK文件其实是异步的,在没请求完成之前就实例化对象就会报错,提 ...

  5. python爬取网易云音乐_爬取网易云音乐评论(一)——用python执行JS脚本

    抓包分析 可以发现网页是post请求,表单数据有两个参数params和encSecKey,应该是经过js加密所得 因此在 Initiator 栏里找到对应的js,也就是core...js,点击打开查看 ...

  6. ajax 执行成功 modal 关闭_Ajax请求中的async:false/true的作用

    前言: 昨天在做倒计时修改的时候,发现多次点击按钮,我明明做了限制,点击多次的时候发现怎么都会请求了两次,然后我写的是请求成功添加文字,结果总是会添加两次文字, 说明ajax请求了两次了,在网上查了下 ...

  7. 加载页面前执行js脚本,实现浏览器指纹变更

    一般浏览器先加载主页,再请求关联的js脚本文件.不管你把js代码嵌入在html中,还是独立保存为一个文件,都必须等待主页加载完成,js代码加载完成后才能执行.网上有人说把js代码放在head里面,其实 ...

  8. 原声ajax发送post请求,原生JS实现ajax 发送post请求

    1. [代码]原生JS实现ajax 发送post请求 var oStr = ''; var postData = {}; var oAjax = null; //post提交的数据 postData ...

  9. mongo shell连接到mongoDB及shell提示符下执行js脚本

    同mysql数据库类似,mongoDB也可通过mongo客户端连接到mongod服务器来进行绝大多数日常管理.这个命令行工具就是mongo,在mysql中则是mysql.通过mongo命令可以连接到本 ...

最新文章

  1. 不信你看!这次Python和AI真的玩儿大了!!
  2. Python爬虫开发:Request的使用(随机User-Agent)
  3. jmeter中文版新手入门教程
  4. 自定义工作流界面开发
  5. mysql for 循环删除_Java增强for循环中删除元素抛异常问题
  6. 老代码多=过度耦合=if else?阿里巴巴工程师这样捋直老代码 | 技术头条
  7. php redisson,排查redisson中订阅connection无故消失的问题
  8. c语言如何输入未知数据类型的_C语言新手踩坑记!大坑小坑全部都是你的!
  9. 神器!程序员必备的Linux命令行大全(PDF下载)
  10. 连接程序,汇编程序,编译程序和解释程序
  11. 初探信息科学中“三个世界”模型
  12. 「mt4软件」均线指标的应用方法
  13. 北京飞漫软件创始人魏永明
  14. 初学用于华为鸿蒙系统(HarmonyOS)的编程开发工具HUAWEI DevEco Studio:你好,鴻蒙~
  15. SIP与P2P的技术携手创造奇迹?
  16. 石溪计算机学校校服,美国纽约州著名高中推荐盘点,总有你想去的!
  17. [Codeforces 940E]Cashback
  18. 利用PYTHON出小学数学题
  19. oppo在哪root权限,oppo手机的root权限在哪开启
  20. 数据大小超出此类型的最大值

热门文章

  1. 【元胞自动机】元胞自动机交通事故通行【含Matlab源码 1345期】
  2. 【全国计算机等级考试二级教程——C语言程序设计(2021年版)编程题答案-第8章】
  3. SWFObject2
  4. 电脑快捷键:Ctrl+26英文字母组合,新人必会!
  5. 批处理--删除当前目录及子目录中的空文件夹或文件
  6. 2.3.1操作系统-存储管理:页式存储、逻辑地址、物理地址、物理地址逻辑地址之间的地址关系、页面大小与页内地址长度的关系、缺页中断、内存淘汰规则
  7. 转:九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)
  8. 2022-2028全球与中国移动网络运营商市场现状及未来发展趋势
  9. Java object类型转换为int类型
  10. Load balancer does not have available server for client问题