AJAX使用jQuery - 语法错误?

时间:2011-12-01 21:22:08

标签: javascript jquery html ajax

以下是包含对负责发出AJAX调用的JavaScript函数的调用的HTML。我知道锚标签不应该具有值属性,但我使用它与jQuery的.attr(“value”)方法。

<a href="javascript:;" onclick="ajaxTest();" title="Execute AJAX" value="executeAJAX">Execute AJAX</a>

以下是JavaScript函数。如果它有任何意义,它本身就包含在.js文件中。

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {"selectedScope": "5",
               "selectedView": "6"},
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

每次单击链接时,Firefox的Web控制台中都会显示“语法错误”消息。但是,JavaScript似乎按预期工作。

我只是想了解我收到错误的原因。

我应该补充说我正在使用jQuery 1.7.1。

我已经执行了搜索,我发现的唯一解决方案是“数据”选项的键应该用双引号括起来,所以我已经实现了,但我仍然得到语法。

感谢。

  

修改

     

查看Firebug控制台,上面的代码不会触发   像在Firefox的控制台中那样的错误,但是,我看到了以下内容   在POST请求的XML部分:

     

XML解析错误:语法错误位置:   moz-nullprincipal:{1d13df07-25fb-4058-9f82-ce1bef3c8949}行号   1,第1栏:
  alskdfjlaksjdfjasdfl
  ^

     

“alskdfjlaksjdfjasdfl”就是我在测试这些东西时设置我的servlet的原因。

     

这有点奇怪,因为jQuery似乎试图解析   作为XML的响应虽然我已明确声明它是文本。

6 个答案:

答案 0 :(得分:12)

我最近遇到了同样的问题。 jQuery似乎正在正确地处理数据和dataType,而是Firefox返回语法错误,这解释了为什么你的代码按预期执行但仍然向控制台打印错误。

如果查看开发人员控制台,可以看到Firefox正在将纯文本数据解释为另一种格式(可能是XML)。 Firefox厌倦了将数据解析为XML,但不能,因为它不是有效的XML导致“语法错误”被打印到控制台。

对我来说这个问题的解决方法是编辑服务器,使其返回以下标题:

Content-Type: "text/plain"

这只是Firefox的一个问题,Chrome没有遇到这个问题。有一个Firefox bug here似乎触及了这个问题。

答案 1 :(得分:8)

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {"selectedScope": "5",
               "selectedView": "6"          <---- here (drop comma, add bracket)
               },
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

答案 2 :(得分:2)

这是你的数据对象问题,你错过了尾随}

修改

不确定是否存在问题,但我认为您可以跳过数据对象中的键的引用(如果您只打算发送数字,也可以绕过值,如果您打算发送字符串,请保留它们实例):

编辑2:

根据jQuery documentation,.append()需要DOM元素,HTML字符串或jQuery对象。因此,我已经创建了一个响应的DOM文本节点,并附加了该文本字符串而不仅仅是文本字符串。请注意,编辑未经测试

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {
           selectedScope: 5,
           selectedView: 6
        },
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(document.createTextNode(responseData));
        }
    });
}

答案 3 :(得分:2)

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {
            "selectedScope": "5",
            "selectedView": "6"
        }, // <-- need closing curly brace and comma
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

修改

我让它工作here on jsFiddle

此外,请尝试更改

<a href="javascript:;" ... 

<a href="javascript:void();"...`

编辑2

我也让它以另一种方式工作。 (使用Firefox 8.0.1和Jquery 1.7.1)

See it in action here.

答案 4 :(得分:1)

那是因为您忘记在}参数上添加data。试试这个:

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        data: {"selectedScope": "5",
               "selectedView": "6"},
        dataType: "text",
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}

一个建议:当你遇到这样的问题时。使用Google Closure Compiler Service。它会告诉您问题的确切位置。或Firebug,如果您使用Firefox。

答案 5 :(得分:0)

function ajaxTest() {
    $.ajax({
        type: "POST",
        url: "doAJAX",
        dataType: "html",
        data:{
               "selectedScope": "5",
               "selectedView": "6"
         },
        success: function(responseData) {
            $("#replaceThis").append(responseData);
        }
    });
}