2008-11-27 2 views
1

Я нашел странную ошибку (возможно). Когда я отправляю параметры в $ .ajax в форме хэша и пытаюсь проверить эти параметры в $ .ajaxSend, я обнаружил, что settings.data имеет значение null, settings.url был нормальным с включенными параметрами. Затем я просматриваю код jQuery и обнаружил, что данные стерты.

// If data is available, append data to url for get requests 
    if (s.data && type == "GET") { 
     s.url += (s.url.match(/\?/) ? "&" : "?") + s.data; 

     // IE likes to send both get and post data, prevent this 
     s.data = null; 
    } 

Теперь я нуждается в разборе URL ((. Что делать?

In JQuery, using ajaxSend to preview the url built by $.post call

Здесь в комментариях я вижу, что данные должны быть там.

ответ

1

По умолчанию ничего прошло поскольку данные, которые не являются строкой, обрабатываются и преобразуются в строку запроса. Поэтому, если вы используете POST для пропуска ошибки:

$.post({ 
     url: "http://yourserver/ajax" , 
     data: {param1: 'val1', param2:'val2'} 
}); 

в $.ajaxSend значение settings.data будет 'param1=val1&param2=val2', и вам нужно будет проанализировать параметры, например, с помощью GET.

Если вы хотите избежать разбора URL-адреса или данных, просто добавьте копию данных при создании объекта настроек. Дополнительный параметр не должен вызывать никаких проблем.

var data = {param1: 'val1', param2:'val2'}; 
$.get({ 
     url: "http://yourserver/ajax" , 
     data: data, 
     dataCopy: data 
}); 

Затем в $.ajaxSend вы можете проверить значения в settings.dataCopy.

Смежные вопросы