【问题标题】:jquery $.post returned data from php is emptyjquery $.post 从 php 返回的数据为空
【发布时间】:2011-02-28 04:22:47
【问题描述】:

我正在使用此代码发布到 php 页面:

var qreq = ".....myurl.php";
$.post(qreq, function(data){alert(data);});

在我的 PHP 文件中,我有这个:

......
$prevtopic = $row["topic_id"];
echo $prevtopic;

警报出现,但为空白。出于某种原因,即使我从 PHP 文件中回显,数据也是空的。我也试过只是回声“嗨”,但这也没有用。我做错了什么?

谢谢。

【问题讨论】:

  • PHP文件是否在同一个域中?
  • 不,但这没关系,对吧?我在请求中使用了完整的 url。
  • 猜猜我们看到更多你的代码告诉你!首先确保您使用正确的 url,也许您可​​以通过在浏览器中输入来确定;要查看有关浏览器和服务器之间发送的数据的更多信息,请尝试使用 firebug (addons.mozilla.org/de/firefox/addon/1843) 之类的方法,它可以在控制台中向您显示调用的 url、正在发布的数据等...
  • Ajax 请求,如您正在发出的请求,出于安全考虑,需要位于同一域中。
  • 网址正确;当我直接从浏览器运行 php 时,回声很好。另外,我可以告诉 .post 正在工作,因为我能够通过 php 将数据插入数据库。

标签: php javascript jquery post echo


【解决方案1】:

你不能像这样跨域发出请求,阻止你的是same-origin policy,用来防止恶意的跨域请求(即使你的没有恶意,它仍然被阻止)。

您可以在这种情况下使用JSONP,但无法获得正常的 html/文本内容。 Here's a short writeup with a better description on JSONP,或here for a full exampleyou need to return JSONP from PHP

至于为什么?这是因为http://evil.com/不应该能够在没有一些检查的情况下向http://mybank.com发出请求,这就是政策存在的原因。

【讨论】:

  • 允许跨域 GET 请求 :)
  • php 中的所有内容都通过这个 .post 正确执行,并将内容插入到我的数据库中。尽管有政策,这怎么行?该策略是否只是阻止数据从 php 传输到 js?
  • @vee - 该策略允许您访问服务器,但阻止响应,这就是 data 为空的原因。
  • @Anpher:如果是图像,或者实际加载脚本、iframe 等,则不能使用 AJAX。但是,我的页面不允许向您的 gmail 页面发起请求,并取回用户名字段(例如,如果您有自动完成功能,大多数人都会这样做)......服务器会收到请求,但是我的页面不会取回数据...我希望这是出于我的示例的明显原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多