循环中的URL重定向

时间:2015-11-19 16:04:18

标签: javascript api loops

我在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++;
}

?>

提前致谢!

3 个答案:

答案 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);}