【问题标题】:AJAX JSON locking browserAJAX JSON 锁定浏览器
【发布时间】:2012-04-30 12:26:19
【问题描述】:

服务器端 PHP 脚本

echo " ";
while(connection_aborted()==0) {
    sleep(10);
}

客户端 JQuery 代码(工作正常)

$.post("/url/to/server", some_data, function (d) {
    console.log(d);
})

客户端 JQuery 代码(导致问题)

$.post("/url/to/server", some_data, function (d) {
    console.log($.parseJSON(d));
})

当我运行第一个 JQuery 代码并刷新浏览器时,一切都按预期工作(浏览器重新加载)。当运行第二个 JQuery 代码(注意 parseJSON)并尝试刷新浏览器时,浏览器被锁定(Chrome),它永远不会重新加载。 jquery 帖子导致了这个锁,但我不明白为什么?为什么回调函数中的parseJSON会导致浏览器锁定。有什么解决方法吗?

仅供参考:上面的代码只是我实际编码的一个小版本,在我的真实代码中,我从服务器端传递真实的 JSON 数据,并使用 JQuery 处理它。

【问题讨论】:

    标签: php json google-chrome browser locking


    【解决方案1】:

    试试看

    $.post("/url/to/server", some_data, function (d) {
        console.log(d);
    }, "json");
    

    如果它仍然无法正常工作,我们需要您的 JSON 样本。

    【讨论】:

    • 也尝试过,结果与在函数中包含 $.parseJSON 相同。浏览器根本不刷新!
    • JSON 示例:{"connected_users":1,"image":{"append_images":[{"image_id":"65106","url":"http:\/\/a5. sphotos.ak.fbcdn.net\/hphotos-ak-ash4\/s2048x2048\/392472_10150740932392622_143076282621_9409919_12445871_n.jpg"}, ..................{"image_id":"65107 ","url":"http:\/\/a2.sphotos.ak.fbcdn.net\/hphotos-ak-ash3\/s2048x2048\/559516_391927920841880_184289921605682_1308515_1885941461_n.jpg"}],"current_image_id":"6}51
    • 它不是无效的,“....”,我只是把它放在那里,因为发布 cmets 有 600 个字符的限制。 JSON由php json_encode产生,不可能无效
    【解决方案2】:

    $.parseJSON 将永远阻止/锁定您的浏览器似乎没有任何正当理由。您收到的变量 "d" 到底是什么?它的大小是多少?

    你还必须去:

    Chrome --> Right click --> Inspect element --> 
    Profiles --> Collect Javascript CPU Profile
    

    检查浏览器端到底出了什么问题。

    【讨论】:

    • 大小非常小,几乎只有几KB。我在 PHP 端做了一些测试,当我在浏览器上单击“刷新”时,connection_aborted() 仍然返回“0”,表示连接保持活动状态。为什么,我不明白?
    • 您的 json 没有大小,应该不是问题。所以我怀疑它可能是服务器端 php 脚本问题。但是你说没有 $.parseJSON 一切都像上帝为你做的一样。这里有些东西看起来很奇怪,但我们仍然隐藏着:)
    • 我使用 sleep 是有充分理由的,但我不会深入探讨。当我刷新页面时,connection_aborted() 返回“1”。但是当我有 paseJSON 时,PHP 脚本会继续运行。
    • 信不信由你,就是这样!我已经编程了很长时间才犯了一个小错误。但这……已经抓住了我!互联网上有关于长轮询 AJAX 锁定浏览器的帖子,但我似乎没有任何帖子这么奇怪!
    • 好吧,我去了这个 php 手册(我并没有像你那样真正使用 connection_abort()).. 在第一条评论中,用户指出抛出 echo "<br>" ; // To make this work on chrome .. . 他还指出,使用输出缓冲区方法,您需要包含它才能使其在 chrome 上工作。我对这个提示/技巧的经验为零,但您绝对应该访问此页面一次...php.net/manual/en/function.connection-aborted.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多