2013-06-01 4 views
2

Я получил страницу зарегистрироваться на моем сайте, проблема в том, что я начал получать эти ошибки:Uncaught TypeError: Не удается прочитать свойство «responseText» неопределенных

Uncaught TypeError: Не удается прочитать свойство «responseText» неопределенных

Refused установить небезопасный заголовок "Content-Length" register.php: 1

Refused установить небезопасный заголовок "Connection"

Даже без последних 2 ошибок (если я не устанавливаю соединения, заголовки длины содержимого), я получу первую ошибку.

Для моей функциональности AJAX я использую эту функцию:

function AjaxLoad(xhr, url, cfunc, syn, method, headers, params) 
{ 
    if (window.XMLHttpRequest) { 
     xhr = new XMLHttpRequest(); 
    } else { 
     xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xhr.onreadystatechange = cfunc; // This line take place on true/false 

    xhr.open(method, url, syn); 
    $.each(headers ,function(index, value){ 
     xhr.setRequestHeader(index, value); 
    }); 
    xhr.send(params); 
} 

На мой JS код я вызова функции вроде этого:

var headersObject = {"Content-type" : "application/x-www-form-urlencoded", "Content-length" : userCap.val().length, "Connection" : "close" };  

AjaxLoad(
    xhr, 
    "../php/Ajax/captchaValidator.php", 
    getResponse, 
    false, 
    "POST", 
    headersObject, 
    userCap.attr("name") + "=" + encodeURIComponent(userCap.val()) 
); 

AjaxLoad аргументы Объяснение:

  1. xhr объект
  2. расположение
  3. onreadystatechange обработчик
  4. Synchronous (ее не работает, даже если я буду проходить верно)
  5. метод
  6. заголовки
  7. ключ = значение пары (я проверить его так, чтобы получить правильное значение)

Это функция GetResponse:

function getResponse(){ 
     var strongEl = capCon.next(); 
      if(xhr.responseText == "0"){ 
       if(strongEl.prop("tagName") == "STRONG"){ 
        strongEl.getReplace('<strong id="sE">קוד שגוי</strong>'); 
       }else{ 
        capCon.after('<strong id="sE">קוד שגוי</strong>').next(); 
       } 
       bToSubmit = false; 
      }else{ 
       if(strongEl.prop("tagName") == "STRONG"){ 
        strongEl.remove(); 
       } 
      } 
    } 

Я тестирую сеть, чтобы проверить, действительно ли файл captchaValidator.php даже попал в браузер, и я получаю статус 200.

Я сделал тест для правильных значений, кода же работал раньше я не знаю, что изменилось, но это ссылка на мою страницу регистрации на сайте Link, Если нажать отправить, Вы можете увидеть (в браузере Chrome на вкладка сети), что все в порядке, но я получаю ошибки, о которых я упоминал на вкладке консоли. Если кто-то может взглянуть, я буду очень благодарен.

+0

Если у вас есть '$' (jQuery), почему вы не используете '$ .ajax'? – Eric

+0

Где пользователь? GetResponse? Вот где ваша первая ошибка исходит из – Eric

+0

Я не изучал ajax на jquery, так что до тех пор, пока я не пользуюсь js –

ответ

1

Как сказано в сообщении об ошибке, переменная xhr не определена. С быстрым взглядом на функцию getResponse вы можете видеть, что это, вероятно, не в области. Тот, который является параметром AjaxLoad, является локальным для этой функции (btw, имея его как параметр, кажется довольно бесполезным, поскольку первое, что вы делаете, это назначить ему), и тот, который ваша передача как аргумент в вашем вызове, вероятно, undefined или из другого объема.

Вместо этого вы можете получить доступ к текущему объекту XMLHttpRequest от обработчика событий с помощью this keyword. Измените свой код на

if (this.responseText == "0"){ 
+0

Я сделал исправление, но я получаю 2-секундные ошибки ... –

+0

Отказался от установки небезопасного заголовка «Content-length» register.php: 1 Отказался от установки небезопасного заголовка «Соединение» –

+0

Являются ли эти ошибки PHP? Тогда вы должны показать нам этот источник. Однако вам редко приходится настраивать заголовок 'ContentLength' вручную, он вычисляется динамически и автоматически устанавливается. – Bergi

1

Если вы пытаетесь использовать AJAX и JQuery есть, использовать $.ajax и friends:

$.post(
    "../php/Ajax/captchaValidator.php", 
    userCap.attr("name") + "=" + encodeURIComponent(userCap.val()), 
    function(responseData) { 
     //... 
    } 
) 

Ваш код не работает, так как переменная xhr не в рамках getResponse. Вы можете использовать внутри обработчика событий вместо xhr, чтобы обратиться к объекту XHR.

+1

Я не пытаюсь использовать какой-либо ajax с jquery, код действительно работал, прежде чем я не знаю, что я изменил. –

+1

@uBlankText: В этом твоя проблема. Если вы все равно используете jQuery, вы должны пытаться сделать ajax через него. – Eric

+0

Я вас понимаю, Но вы действительно думаете, что моя проблема в том, что я не использую ajax, хотя он работал раньше без jquery ajax? –

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