2014-01-18 3 views
2

У меня есть страница php с формой, которая имеет кнопку. Когда нажимается кнопка, запускается функция jquery, которая выполняет некоторые проверки валидации, а затем отправляет форму с помощью ajax. В php-скрипте, запущенном ajax, установлен файл cookie. Immediatly после того, как cookie установлен, я затем попытаюсь получить значение cookie, которое я эхо от скрипта и выплюнул в функции успеха запроса ajax. Значение cookie не установлено.Настройка Cookie с запросом Ajax

Код выглядит следующим образом.

mainpage.php

<script type="text/javascript"> 
    $(document).ready(function() 
    { 
     $('#submit_compare_stage1').click(function() 
     { 
      //Validation stuff 

      if (passed_validation) 
      { 
       var form_data = $('#compare_form').serialize(); //Collect query details into a form 

       $.ajax({ 
        type: "POST", 
        url: "scripts/process_compare.php", 
        data: form_data, 

        success: function(data) 
        { 
         alert(data); 
        }, 

        error: function(jqXHR, textStatus, errorThrown) 
        { 
         //Error stuff 
        } 
       }); 
      } 

      return false; 
     }); 
    }); 
</script> 

<form name="compare_form" id="compare_form" action="">    
    .... 

    <button id='submit_compare_stage1' name='submit_compare_stage1'>Next</button> 
</form> 

process_compare.php

<?php 
    //MySQL Stuff 

    makeCookie('cs', '2'); 

    echo 'hi' . getCookie('cs', false); 

    echo "success"; 

    function makeCookie($name, $contents, $length = 3600) 
    { 
     // Create a new cookie 
     setcookie($name, $contents, time() + $length, '/'); 
    } 

    function getCookie($name, $delete = true) 
    { 
     // Return the contents of a cookie and delete it if requested 

     $contents = $_COOKIE[$name]; 

     if($delete) { 
      setcookie($name, '', time() - 3600, '/'); 
      setcookie($name, '', time() - 3600); 
     } 

     return $contents; 
    } 
?> 

запрос Аякса вывешивает предупредительные сообщения говорят "hisuccess", так что куки не установлен.

Я не уверен, что это потому, что страница нуждается в обновлении или что-то еще, но я знаю код, используемый для работы, когда мы регулярно отправляли форму с помощью action = "/ process_compare.php" и iframe to вносить результаты.

Может ли кто-нибудь помочь?

+0

Неужели вы попробовали запустить скрипт (на стороне сервера), если сгенерирован какой-либо файл cookie? –

+0

извините, я не понимаю. Это определенно работает сценарий, потому что он печатает бит «успех» эха. –

+0

Я имел в виду ваш process_compare.php напрямую без ajax и пытаюсь эхом печенье, если оно там. Путь, который вы правильно установили как/который должен быть доступен через весь домен. –

ответ

5

Куки отправляются в виде заголовка ответа. В аргументе data вы получаете тело ответа, а не заголовки.

Кажется, что заголовки ответа вы получаете от getResponseHeader() или MDN - getAllResponseHeaders(), не включайте заголовки Set-Cookie.

Но печеньки прозрачно обрабатываются браузером. Таким образом, для того, чтобы получить доступ к куки, вы можете использовать свойство document.cookie

$.ajax({ 
    ... 
    success: function(data, status, jqxhr) { 
     var cookies = []; 
     if (document.cookie) 
      cookies = document.cookie.split('; '); 

     // do something with the cookies 
    }, 
}); 

или использовать jQuery Cookie плагина доступна на github.

+0

Хорошо, думаю, я понимаю. Итак, что мне нужно добавить к моему аякс-коду, чтобы сделать cookie доступным для чтения остальной частью программы на более поздний срок? –

+0

@PippaRoseSmith См. Обновленный ответ. –

+0

Спасибо большое Олаф :) –

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