AJAX调用无法使用&#?

时间:2010-12-18 15:21:58

标签: jquery ajax json callback

我遇到了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

有什么想法吗?

3 个答案:

答案 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