【问题标题】:Why isn't this Jquery Ajax working in Opera and Safari?为什么这个 Jquery Ajax 不能在 Opera 和 Safari 中工作?
【发布时间】:2010-11-24 22:24:30
【问题描述】:

此代码适用于 FF、Chrome、IE6/8,但不适用于 Safari 和 Opera。 任何想法为什么?

代码如下:

var name = $('#esm').val();
        var email = $('#nam').val();
        var message = $('#med').val();
        var ad_id = $('#i_d').val();

    var data_string = 'esm='+ name + '&nam=' + email + '&med=' + message + '&i_d=' + ad_id;

            $.ajax({
                type:       "POST",
                url:        "/my_php_file.php",
                data:       data_string,
                success:    function(data) {
                    $('#tip_loader').hide();
               if(data==1){alert('success'); }
               else {alert('error'); }
                       }//end success function
        }) //end ajax call

我已经将错误定位到“Ajax”调用,因为当我在$.ajax 之前放置一个警报框时,警报会正确显示。 但是,如果我将警报框放在成功函数中,则什么都没有显示,没有警报。

这只发生在 Opera 和 Safari 中...

编辑:

仅供参考:我将此 javascript 文件包含到一个 php 文件中,我还将 jquery.js 文件包含到 php 文件中。所以这一切都在一个外部文件中。

编辑:

/main.php /bin/jquery.js /bin/tip.js /bin/tip.php

我把上面的js文件包含在main.php中,main.php中的form action设置为/bin/tip.php

而 ajax url 的路径是 /bin/tip.php 而不是 my_php_file.php

【问题讨论】:

  • 我不太会使用 Firebug,我应该如何阅读它的内容?另外,firebug 不只是 FF 的,那我怎么知道 Opera 有什么问题呢?
  • “网络”选项卡,您可以在其中找到您的请求和响应。
  • 我应该寻找什么,上面写着“200 OK”和一堆其他的东西。一切似乎都很好。反应是我所期望的。
  • @Camran - Opera 内置了一个名为 Dragonfly 的调试工具。进入工具菜单 -> 高级 ->Opera Dragonfly 如果没有文件菜单栏,点击菜单 -> 页面 -> 开发者工具 -> 打开 Opera Dragonfly
  • @Drackir:找到了!现在我猜我应该在“网络”下寻找对吧?但是它是空白的,当我提交时没有任何反应...任何其他提示如何解决?非常感谢

标签: php javascript jquery html ajax


【解决方案1】:

在 Opera 中,默认情况下 Allow File XMLHttpRequest 为 false。因此,您需要更改设置。打开 Opera 浏览器,输入 about:config。它将带您进入“首选项”屏幕。转到 User Prefs 文件夹,您可以看到一个设置 Allow File XMLHttpRequest。检查,然后保存。它应该可以工作。

【讨论】:

    【解决方案2】:

    Opera 内置了一个名为 Dragonfly 的调试工具。转到工具菜单 -> 高级 ->Opera Dragonfly
    如果没有 File 菜单栏,点击 Menu -> Page -> Developer Tools -> Open Opera Dragonfly

    打开后(在您正在处理的页面上打开它),单击“脚本”选项卡(它可能会要求您刷新页面,执行此操作)并下拉到您的外部 js 文件。 找到代码后,您可以通过单击左侧的行号在 $.ajax() 行上设置断点。现在,触发您的代码,您会看到它会在该 JavaScript 行上中断。然后,您可以使用检查选项卡(底部、中间)来确保所有变量都设置正确。您还可以单步调试和调试 JavaScript。

    您要做的另一件事是添加一个错误函数,如下所示:

    $.ajax({
        type: "POST",
        url: "/my_php_file.php",
        data: data_string,
        success: function(data) {
            $('#tip_loader').hide();
            if (data == 1) { alert('success'); }
            else { alert('error'); }
        }, //end success function
        error: function(xhr, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });  //end ajax call
    

    看看这是否能提供更多信息。

    另外,按照@Mufasa 的建议检查错误控制台。可以在 Dragonfly 的 Error Console 标签下找到。

    【讨论】:

    • 好的,我收到一条错误消息:“ReferenceError:安全违规”...有什么想法吗?
    • @Camran - 这通常与跨域请求有关。上面的代码正是您使用的代码吗?另外,您检查了错误控制台吗?
    • 上面的代码正是我使用的,另外,错误控制台报告了一些CSS错误,但由于我有条件cmets,可能是由于这个原因。但是除了css之外没有与其他东西相关的错误......那么这可能是php文件的原因吗?
    • @Camran - 我不这么认为。 JavaScript 文件是否从与 /my_php_file.php 文件相同的服务器加载?
    • 哦,php文件的实际名称是tip.php,而且都是在同一台服务器上加载的。唯一的问题是我包含 javascript 文件的页面位于根目录下,而 js 文件位于下一个文件夹,与 php 文件位于同一位置,请检查我的编辑以澄清这一点。
    【解决方案3】:

    真的没有办法说。您没有发布 php 文件。在不知道输出的情况下,我们无法确定浏览器将如何响应。

    其他提示,#1 你没有使用 encodeURIComponent 传递给它的任何值。让 jQuery 为你做这件事要简单得多,

    而不是 data: data_string,你应该有

    数据:{ esm:姓名,name:电子邮件,med:消息,“i_d”:ad_id }

    jQuery 将为您正确地创建查询字符串。

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2013-05-18
      • 2010-12-16
      相关资源
      最近更新 更多