Ошибка jquery ajax при обновлении до v1.5 - PullRequest
2 голосов
/ 10 февраля 2011

Я обновился с v1.4.4 до v1.5.Я думаю, что нашел проблему ниже

$(document).ready(function(){

    // Get token on page load.
    update_csrf_token();

Функция выглядит следующим образом ... EDITED

function update_csrf_token()
{
    $.ajax({
        type: "GET",
        url: "<?php echo site_url('includes/csrf_token/'); ?>",
        dataType: "json",
        jsonp: false,
        jsonpCallback: "callbackName",
        success: function(data) {
            csrf_token = data.csrf_token;
            return data.csrf_token;
        }
    });  
}

Я искал в firebug запрос ajax икажется, что он добавляет ? _ = 1297353567948 в конец URL, что делает токен csrf не генерируемым.Как мне избавиться от этого или это плохо для 1.5, и я ничего не могу сделать?Спасибо

Ответы [ 4 ]

5 голосов
/ 10 февраля 2011

jQuery 1.5 автоматически добавит случайный параметр обратного вызова, но вы можете переопределить его, установив настройки jsonp и jsonpCallback jQuery ajax.

Из API jQuery Ajax :

Начиная с jQuery 1.5, установка для параметра jsonp значения false не позволяет jQuery добавлять Строка "? callback" для URL или попытка использовать "=?" для трансформации. В этом случае, Вы также должны явно установить параметр jsonpCallback. Например, { jsonp: false, jsonpCallback: "callbackName" }.

Параметр подчеркивания (?_=...) - это параметр, содержащий изменяющуюся метку времени, что делает URL запроса всегда таким, каким браузер никогда раньше не видел, и вызывает фактический HTTP-запрос. Параметр можно удалить, включив кэширование, добавив параметр cache: true к вызову .ajax() (или глобальные настройки: jQuery.ajaxSetup({cache:true});. По умолчанию установлено значение true с dataTypes script и jsonp.

2 голосов
/ 27 апреля 2011

Пожалуйста, проверьте ваши коды и плагины (например, старый плагин проверки, который использует $ .ajaxSettings в качестве параметров по умолчанию. Удалите коды, которые выглядят так:

var settings = $.extend( {}, $.ajaxSettings, settings );

Если вы не можете или не можетене хотите этого делать, попробуйте добавить:

{ jsonp: null, jsonpCallback: null }

к вашим настройкам, чтобы ваш код был:

$.ajax({
        type: "GET",
        url: "<?php echo site_url('includes/csrf_token/'); ?>",
        dataType: "json",
        jsonp: null,
        jsonpCallback: null,
        success: function(data) {
            csrf_token = data.csrf_token;
            return data.csrf_token;
        }
    }); 

Или вы можете использовать $ ajaxSetup () для установки по умолчаниюнастройки для предотвращения обратного вызова jsonp:

$ajaxSetup({ jsonp: null, jsonpCallback: null });

Для получения подробной информации, пожалуйста, обратитесь к Ticket # 8084 .

Примечание: Документы плагина проверки в официальном плагине jQueryцентр - http: //plugins.jquery.com/project/validate устарел (это действительно меня беспокоит). Он охватывает только версию 1.5.5 плагина проверки. Убедитесь, что ссылаетесь на домашнюю страницу: плагин jQuery:Проверка для последней версии.

1 голос
/ 29 марта 2012

Установите cache:false в вашем AJAX (не забудьте запятую), и этот параметр перестанет добавляться. Если бы это было связано с jsonp, вы бы увидели что-то вроде:

Обратный вызов = jQuery171003826577159490807_1332979269727

Но? _ = выглядит как отметка времени является признаком того, что jQuery пытается предотвратить кэширование вашего запроса на стороне клиента.

0 голосов
/ 27 апреля 2011

У меня были те же проблемы, и после слишком большого количества поисков я закончил, это было из-за jquery.validate.min.js, который вызвал вызовы jsonp.

Больше никаких проблем с новой версией JQuery Validation 1.8

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

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