AJAX не работает с & #? - PullRequest
       9

AJAX не работает с & #?

1 голос
/ 18 декабря 2010

У меня проблема с JQuery AJAX. Я звоню в файл aspx. Но вот странная часть: если у меня есть символы & # друг за другом, то это не работает. Это работает со всем (я думаю) еще. Но только эти 2 персонажа друг за другом. Они работают в одиночку, так что просто # или просто &.

Это код, который я использую:

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, но это работает, метод никогда не вызывается, когда эти два символа размещены.

Я обнаружил эту проблему при попытке сохранить адрес форума:

Forum.aspx? Г = & сообщений т = 194 & # post1536

Есть идеи?

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

Экодируйте все свои данные перед передачей на сервер.

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

надеюсь, это поможет

1 голос
/ 18 декабря 2010

Вы получаете нулевое значение, потому что # post1536 в контексте URI является внутренним якорем страницы.

Если # post1536 является индикатором ID, попробуйте изменить его на & postId = 1536.

Я не знаком с тем, как вы отправляете данные. Согласно API для jQuery.ajax () этот метод отправки данных требует синхронного (блокирования пользователя) запроса. Я всегда отправлял параметры в виде строки или хэша. Кроме того, ваша функция обратного вызова была той же самой функцией, что и функция, выполняющая 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');
    }
});
0 голосов
/ 18 декабря 2010

Не должно быть причин для отправки запроса на сервер с хеш-тегом, он имеет отношение только к клиенту. Я бы предложил удалить его до запроса.

Теория, почему это происходит. Если URL-адрес, к которому вы делаете запрос, совпадает с URL-адресом, на котором вы в данный момент находитесь, браузер может не попытаться выполнить запрос, поскольку он предполагает, что вы пытаетесь получить доступ к закладке на текущей странице. Просто предположение, хотя.

Пример изменения хеш-тега в строке запроса.

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

Rich

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...