我在php中使用java脚本来重定向URL。这对我有用,因为每次循环运行时,链接都会在新窗口中打开并执行所需的操作。但是我想阻止脚本打开新窗口并在同一页面内运行/加载。如果我打开同一页面的链接,它会在第一次运行时重定向到新页面,并且循环不会进一步运行。
我无法控制下一页,因为它们是API的一部分。我实际上并不想导航到新页面,但我只想运行http:// API,它甚至可以在后台运行。
请告知处理此问题的最佳方法是什么?
这是我目前的剧本:
<?php
$x1=$_POST["textfield1"];
$msg = "New Message Alert From $x1. blah blah";
$query = "SELECT * FROM phone_list";
$result = mysql_query($query);
$num=mysql_numrows($result);
$i=0;
while ($i < $num)
{
$f1=mysql_result($result,$i,"phone");
echo'<script> window.open("http://linktonextpage&msg='.$msg.'&num='.$f1'"); </script>';
$i++;
}
?>
提前致谢!
答案 0 :(得分:0)
正如您所发现的,当您在此时从一个页面移动到另一个页面时,上一页从浏览器消失。 JavaScript不会继续从不再加载的页面运行。
我实际上并不想导航到新页面,但我只想运行http:// API,它甚至可以在后台运行。
然后不要导航到该页面。而是向所需的URL发出AJAX请求。像这样简单:
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
// This function is called when the AJAX request completes.
// Here you would check for errors or respond in some way, if needed.
};
xhttp.open('GET', 'http://someurl', true);
xhttp.send();
只要您没有制作过多的并发请求,就可以在循环中运行它。只需将其括在一个函数中:
function sendRequest(url) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
// This function is called when the AJAX request completes.
// Here you would check for errors or respond in some way, if needed.
};
xhttp.open('GET', url, true);
xhttp.send();
}
并在您的网址上循环调用该功能:
for (var i = 0; i < myUrls.length; i++) {
sendRequest(url);
}
您可以非常轻松地获得更多信息,将回调函数传递到sendRequest()
函数或让sendRequest()
返回AJAX承诺或许多其他内容。这取决于您想要添加的更多功能。这里的主要观点是,响应您的上述陈述,只是在后台制作AJAX请求,而不是将浏览器导航到URL。
注意:目前你的循环是服务器端,这会向浏览器发出大量重复的代码。如上所示,您可以只发出JSON编码的值并执行循环客户端。或者,如果确实想要在服务器端循环,那么只需定义一个类似上面的函数,并在循环中发出对该函数的调用。它仍然是很多重复的客户端代码,但它将完成工作。
答案 1 :(得分:0)
另一种解决方案 - 不如AJAX解决方案更正确, 但很简单:
您可以添加iframe而不是打开弹出窗口。
while(...){
echo '<iframe src="http://linktonextpage&msg='.$msg.'&num='.$f1'." width="100%" height="120"></iframe>';
}
答案 2 :(得分:0)
在您的代码中,您似乎想要向从数据库中提取的所有数字发送消息,因此如果您想使用JavaScript,您可以像以前的答案那样做。
另一种方法是不使用JavaScript。
您还可以向Api Urls发出Curl请求。在您的PHP代码中,无需加载页面。
While (condition) { $service_url = 'http://linktonextpage&msg='.$msg.'&num='.$f1'';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$curl_response = curl_exec($curl);
curl_close($curl);}