【问题标题】:AJAX call not working with &#?AJAX 调用不能与 &# 一起使用?
【发布时间】:2010-12-18 15:21:58
【问题描述】:

我在使用 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 对象,其中变量状态设置为成功。例如,当我跳过输入作者时,我会返回一个 JSON 对象,其中变量状态设置为失败。但是当我尝试 我得到一个空值时,aspx 页面甚至没有被击中。我已经对 aspx 页面进行了广泛的测试,但是其中一个有效,当发布这 2 个字符时,该方法永远不会被调用。

我在尝试保存论坛地址时发现了这个问题:

论坛.aspx?g=posts&t=194post1536

有什么想法吗?

【问题讨论】:

  • 提供list.aspx中接收json消息并生成返回值的代码
  • 毫无意义,因为它甚至还没有达到这一点。它从其他一些地方返回 null,我已经通过整个 List.aspx.cs 文件寻找可能的错误。

标签: jquery ajax json callback


【解决方案1】:

在传递到服务器之前对所有数据进行编码。

data: ({ 
    Callback: "CreateNewItem", 
    ListID: currentList, 
    ItemSubject: encodeURIComponent($('#editContentTitle').val()), 
    ItemText: encodeURIComponent($('#editContentBox').val()), 
    Author: author 
}),

希望这会有所帮助

【讨论】:

    【解决方案2】:

    你得到一个空返回,因为 URI 上下文中的 #post1536 是一个内部页面锚。

    如果 #post1536 是 ID 指示器,那么您应该尝试将其更改为 &postId=1536。

    我不熟悉您发送数据的方式。根据 jQuery.ajax() 的 API,这种发送数据的方法虽然需要同步(用户阻塞)请求。我总是以字符串或散列的形式发送参数。此外,您的回调函数与执行 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');
        }
    });
    

    【讨论】:

    • 我正在运行的 ajax 脚本获取文本并将其存储在数据库中。我有一个文本框,我只是输入文本然后保存。不仅仅是论坛帖子链接,可以是任何东西。我该如何解决这个问题?我希望它能够保存一切。
    • 我提供了一些可能会有所帮助的说明。
    【解决方案3】:

    应该没有理由发送带有哈希标签的服务器请求,它只与客户端相关。我建议在请求之前将其剥离。

    关于为什么会发生的理论。如果您发出请求的 url 与您当前所在的 url 相同,则浏览器可能不会尝试发出请求,因为它会假定您正在尝试访问当前页面中的书签。不过只是猜测。

    将哈希标记更改为查询字符串的示例。

    var url = "Forum.aspx?g=posts&t=194&#post1536".replace("#post", "post="); // returns Forum.aspx?g=posts&t=194&post=1536
    

    丰富

    【讨论】:

    • 是同一页。我怎么能把它去掉。请参阅我由 hal10001 发表的评论。
    • 如果您使用的 url 是 Forum.aspx?g=posts&t=194&#post1536 并且您想将帖子 ID 发送到服务器,我会使用 replace 方法。我在上面包含了一个示例。
    • 问题是链接所在的文本框 $('#editContentBox').val() 。我不知道我将来会发布什么链接/文本。我需要一个通用转换器。下一次我可能会像 data.aspx?hello 这样的东西。如果 JQuery 甚至不能发送一个简单的文本字符串,那它有什么用呢?我的意思是,我没有干扰 URL“List.aspx”。这只是纯文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多