php脚本得到两个ajax请求,只返回一个?
Posted
技术标签:
【中文标题】php脚本得到两个ajax请求,只返回一个?【英文标题】:php script gets two ajax requests, only returns one? 【发布时间】:2010-11-05 08:12:14 【问题描述】:我将从头开始。 我正在构建一个具有双重职责的 wordpress 插件,因为它可以通过简码插入到帖子中,或者作为侧边栏小部件添加。它所做的只是输出一些 js 来向本地 php 文件发出 jquery.post 请求。本地 php 文件向 web 服务发出请求以获取某些数据。 (我不得不这样做,而不是直接使用 jquery.ajax 查询 Web 服务,因为 URL 包含一个许可证密钥,如果放入 js 中该密钥将是公开的)。
无论如何,当我在 wordpress 博客中查看具有侧边栏小部件和通过简码输出的插件的页面时,只有一个请求有效。我的意思是它的工作原理是它从 php 脚本得到响应。页面加载后,如果手动告知,它们都可以正常工作。
网页视图 -> 向我的 php 脚本发送 2 个 post 请求 -> 两个元素都应提交,但只有一个。
我的 php 脚本只是:
<?php
if(isset($_POST["zip"]))
// build a curl object, execute the request,
// and basically just echo what the curl request returns.
?>
非常基本。
这里有一些人想看的js:
function widget_getActivities( zip )
jQuery("#widget_active_list").text("");
jQuery.post("http://localhost/wordpress/wp-content/ActiveAjax.php", zip: zip,
function(text)
jQuery(text).find("asset").each(function(j, aval)
var html = "";
html += "<a href='" + jQuery(aval).find("trackback").text() + "' target='new'> " + jQuery(aval).find("assetName").text() + "</a><b> at </b>";
jQuery("location", aval).each(function(i, val)
html += jQuery("locationName", val).text() + " <b> on </b>";
);
jQuery("date", aval).each(function()
html += jQuery("startDate", aval).text();
<!--jQuery("#widget_active_list").append("<div id='ActivityEntry'>" + html + " </div>");-->
jQuery("#widget_active_list")
.append(jQuery("<div>")
.addClass("widget_ActivityEntry")
.html(html)
.bind("mouseenter", function()
jQuery(this).animate( fontSize: "20px", lineHeight: "1.2em" , 50);
)
.bind("mouseleave", function()
jQuery(this).animate( fontSize: "10px", lineHeight: "1.2em" , 50);
)
);
);
);
);
现在想象有另一个与这个相同的函数,除了前面带有“widget_”的所有内容都没有前面。这两个函数通过以下方式分别调用:
jQuery(document).ready(function()
w_zip = jQuery("#widget_zip").val();
widget_getActivities( w_zip );
jQuery("#widget_updateZipLink").click(function() //start function when any update link is clicked
widget_c_zip = jQuery("#widget_zip").val();
if (undefined == widget_c_zip || widget_c_zip == "" || widget_c_zip.length != 5)
jQuery("#widget_zipError").text("Bad zip code");
else
widget_getActivities( widget_c_zip );
);
)
我可以在我的 apache 日志中看到两个请求都在发出。 我猜这是某种竞争条件,但这没有任何意义。 我对这一切都很陌生,有什么想法吗?
编辑:我想出了一个次优的解决方案。我让我的小部件检测页面上是否也在使用插件,如果是,它会在执行请求之前等待 3 秒。但是我有一种感觉,如果多个客户端同时执行一个页面请求,触发对我的 php 脚本的请求之一,那么同样的事情将会发生,因为我相信问题出在 php 脚本中,这很可怕。
【问题讨论】:
很难说没有更多信息或代码。你可以在Firefox下使用Firebug的Net面板查看浏览器发送和接收的流量(包括请求/响应头),非常方便调试Ajax。 我使用了 firebug,我的 php 脚本返回 200 OK,但其中一个没有内容长度……我不知道那是什么意思。令人惊讶的是,他们都返回了一个有效的响应,所以看起来 jquery.post 以某种方式被阻塞了。 【参考方案1】:没有足够的信息让我真正弄清楚任何事情......
但是要尝试的一件事是获取 firebug 并查看每个请求的响应。
另一个问题可能是……你是用 id 填写的吗?如果是这样,那么可能是因为您在一个页面中有两次相同的 id,这会使事情变得混乱。如果你有它在线,它会更容易帮助你。
编辑:
一些cmets...我不确定这是否可以解决任何问题...但是...
<!--jQuery("#widget_active_list").append("<div id='ActivityEntry'>" + html + " </div>");-->
据我所知,您使用的评论类型只有在 html 中使用时才有效,并且可能会搞砸您的 javascript。将其替换为 //
jQuery("#widget_active_list").append(jQuery("<div>")
.addClass("widget_ActivityEntry")
.html(html)
.bind("mouseenter", function()
jQuery(this).animate( fontSize: "20px", lineHeight: "1.2em" , 50);
)
.bind("mouseleave", function()
jQuery(this).animate( fontSize: "10px", lineHeight: "1.2em" , 50);
)
);
其次...整个块嵌套在最后一个 .each 中,这似乎没有效果,但是,它弄乱它并非不可能。
最后,虽然它实际上可能没有什么不同,但您可能应该将响应的类型设置为 xml。在 php 中同时使用 http 标头并使用函数的最后一个参数。即
header("Content-Type: application/xml");
和
jQuery.post("http://localhost/wordpress/wp-content/ActiveAjax.php", zip: zip, thefunctionhere, xml);
如果这没有帮助,我对次优解决方案的建议是改用 get 请求,并添加一个未考虑到两个请求的随机参数,但使每个参数都相同请求,但每次访问页面时都会有所不同。这样,浏览器将缓存第一个请求,而不是第二次查询服务器,但是当人们再次访问该页面时,它不会缓存它。
【讨论】:
我确保有单独的 id,我用它们来区分小部件和插件。另外,就像我说的,如果我重新加载页面,只有一个有效,但我每个都有“更新”按钮,所以如果我强制更新不起作用的那个,它会正确更新... 我还没有足够的声誉来评论您的帖子,但是在网络选项卡上,在每个请求下,应该有 3 个选项卡 - 参数、标题和响应 - 它在回复标签? 正如我评论的那样,它们都返回了正确的预期响应。然后我使用 jquery 用响应更新我的页面。奇怪的是,没有内容长度的是更新页面的那个...... 我们可以看到页面吗?因为我认为如果不实际访问该页面,我将无法提供更多帮助。 评论添加...希望他们会有所帮助。以上是关于php脚本得到两个ajax请求,只返回一个?的主要内容,如果未能解决你的问题,请参考以下文章