以下是包含对负责发出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的响应虽然我已明确声明它是文本。
答案 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)
答案 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);
}
});
}