为什么这个Jquery Ajax不能在Opera和Safari中运行?

时间:2010-11-24 22:24:31

标签: php javascript jquery html ajax

此代码适用于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中的表单操作设置为/bin/tip.php

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

3 个答案:

答案 0 :(得分:1)

在Opera中,默认情况下允许文件XMLHttpRequest为false。所以你需要改变设置。打开Opera浏览器,输入about:config。它将带您进入Preference屏幕。转到User Prefs文件夹,您可以看到设置允许文件XMLHttpRequest。检查然后保存。它应该工作。

答案 1 :(得分:0)

Opera有一个名为Dragonfly的调试工具。转到“工具”菜单 - >高级 - > Opera Dragonfly
如果您没有“文件”菜单栏,请单击“菜单” - >页面 - >开发人员工具 - >打开Opera Dragonfly

打开它后(在您正在处理的页面上打开它),单击Scripts选项卡(它可能会要求您刷新页面,执行此操作)并下拉到外部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的错误控制台选项卡下找到。

答案 2 :(得分:0)

没有办法说出来。你没有发布php文件。在不知道输出的情况下,我们无法确定浏览器的响应方式。

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

而不是data:data_string,你应该有

数据:{esm:name,nam:email,med:message,“i_d”:ad_id}

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