【问题标题】:Loading external php page加载外部 php 页面
【发布时间】:2013-03-16 09:52:49
【问题描述】:

下面的函数抓取一个 php 页面,然后每 5 秒重新加载一次。来自roomdata.php 页面的唯一内容是带有颜色名称(蓝色、黄色等)的字符串。我希望能够在函数modifyLight(color) 中使用该名称,但它不允许我这样做。我不知道为什么,但无论我尝试什么,它都不会将变量数据视为字符串,即使我将其澄清为一个。

感谢任何帮助,谢谢!

$(function(){
  function loadData()
  {  
    var data = load('roomdata.php');
    modifyLight(data);
    setTimeout(loadData, 5000); // makes it reload every 5 sec
  }
  loadData(); // start the process...
});

【问题讨论】:

  • 你在那里进行递归调用,把setTimeout(loadData, 5000); 放到loadData() 函数之外
  • @ttony 谢谢,但这对我的问题并没有真正的好处。无论哪种方式,超时都有效。
  • 您可能应该将jqueryajax 添加到此问题的标签中。
  • 当你说它不让你时,这究竟是什么意思?您收到错误消息了吗?
  • 我从 php 页面接收数据就好了。如果我要打印 document.write(load('roomdata.php'));它会很好地显示一种颜色(蓝色、黄色等),但我不能将该颜色用作函数 modifyLight(color); 中的字符串

标签: php jquery ajax loading external


【解决方案1】:

您正在使用异步 ajad 调用。您需要将您的请求配置为同步。

 $.ajax(URL, {async : false});

这样,下一行的执行将一直执行到 ajax 请求完成为止。

编辑

你的函数应该是这样的:

$(function(){
  function loadData() {
     $.post("roomdata.php", function(result) {
        modifyLight(result);
        setTiemout(function() { loadData(); }, 5000);
     }  
  }
  loadData(); // start the process...
});

您这样做的问题是$.load(); 仅使用 Ajax 加载某些内容并将内容放在 $('#yourdiv'); 上它不返回任何内容。您需要一个 ajax 请求,其中包含“成功”事件中的某些内容。在我给你的代码中,$.post 通过 post 向roomdata.php 发出 ajax 请求,然后,一旦 ajax 完成,它就会执行函数 function(result) { ... }

【讨论】:

  • 我从页面收到的文本很好,可以很容易地用打印输出或内容区域显示它:$('#leftNav').load('roomdata.php');但我不能在函数 modifyLight(color) 中使用它
  • 我想你会发现this post很有用。 $.post 使用POST method and $.get sent it with GET method 发送数据。另外,如果这是解决方案,请将其标记为... :)
  • 对不起,我没看清楚你的评论。您能否添加您从该 ajax 请求收到的响应?
  • "Green" 是我从请求中收到的内容。没有引号。我希望能够做到以下几点: modifyLight(response goes here);
  • 我制作的版本应该可以工作......在你的modifyLight()函数的第一行制作:alert(TheParamYouAreReceiving);,看看会发生什么......