我遇到了JQuery ajax的问题。我正在调用一个aspx文件。但是这里有一个奇怪的部分,如果我有彼此之后的角色和#,那么它就不起作用了。它适用于所有(我认为)其他。但只是那两个字符相继。他们单独工作,所以就像#或只是&。
这是我正在使用的代码:
function CreateNewItem() {
$.ajax({
url: 'List.aspx',
data: ({ Callback: "CreateNewItem", ListID: currentList, ItemSubject: $('#editContentTitle').val(), ItemText: $('#editContentBox').val(), Author: author }),
type: "POST",
dataType: "json",
success: function (newItem) {
if (newItem.status == "success") {
$('#ItemBoxDiv').append(GetItemHTML(newItem.itemID, newItem.itemSubject, newItem.itemText, author, newItem.itemPosted, newItem.itemCompleted));
RestartAccordion();
}
else
ErrorOccured('The message could not be created due to the following reason\\n' + newItem.errorMessage);
},
failed: function (data) {
ErrorOccured('The item could not be created, an unknown error occured and the ajax request/response was incorrect');
}
});
}
因此,当我使用普通文本时,我会返回一个JSON对象,其变量status设置为success。当我跳过输入例如作者时,我得到一个JSON对象,变量status设置为failed。但是,当我尝试&#;我得到一个null后,aspx页面甚至没有被击中。我已经使用aspx页面进行了大量测试,但是那个工作,当发布这2个字符时,永远不会调用该方法。
当我试图保存论坛地址时,我发现了这个问题:
Forum.aspx克=帖&安培;ΔT= 194&安培;#post1536
有什么想法吗?
答案 0 :(得分:1)
你得到一个null,因为URI的上下文中的#post1536是一个内部页面锚点。
如果#post1536是ID指示符,那么您应该尝试将其更改为& postId = 1536。
我不熟悉您发送数据的方式。根据jQuery.ajax()的API,这种发送数据的方法需要同步(用户阻塞)请求。我总是用字符串或哈希发送params。此外,您的回调函数与执行ajax的函数功能相同。你不需要这样做,因为“成功”就是你的回调。尝试以下内容:
var params = "ListId=" + currentList + "&ItemSubject=" + $('#editContentTitle').val() + "&ItemText=" + $('#editContentBox').val() + "&Author=" + author;
$.ajax({
url: 'List.aspx',
data: params,
type: "POST",
dataType: "json",
success: function (newItem) {
if (newItem.status == "success") {
$('#ItemBoxDiv').append(GetItemHTML(newItem.itemID, newItem.itemSubject, newItem.itemText, author, newItem.itemPosted, newItem.itemCompleted));
RestartAccordion();
}
else
ErrorOccured('The message could not be created due to the following reason\\n' + newItem.errorMessage);
},
failed: function (data) {
ErrorOccured('The item could not be created, an unknown error occured and the ajax request/response was incorrect');
}
});
答案 1 :(得分:1)
在传递给服务器之前,先对所有数据进行Ecode。
data: ({
Callback: "CreateNewItem",
ListID: currentList,
ItemSubject: encodeURIComponent($('#editContentTitle').val()),
ItemText: encodeURIComponent($('#editContentBox').val()),
Author: author
}),
希望这会有所帮助
答案 2 :(得分:0)
没有理由发送带有哈希标记的服务器请求,它只与客户端有关。我建议在请求之前将其剥离。
关于它为何发生的理论。如果您提出请求的网址与您当前使用的网址相同,则浏览器可能不会尝试发出请求,因为它会假设您尝试访问当前网页中的书签。只是一个猜测。
更改哈希标记到查询字符串的示例。
var url = "Forum.aspx?g=posts&t=194&#post1536".replace("#post", "post="); // returns Forum.aspx?g=posts&t=194&post=1536
富