2015-05-18 3 views
4

Я использую CI и окна 7. Из моего файла просмотра я вызываю функцию в ajax, которая находится в контроллере. В моем ajax я передаю строку как Pack & Send, но когда я повторяю ту же строку в функции контроллера, это просто эхо Pack.Функция PHP не отображает строку после «&»

Мой Аякса вызов выглядит

<script> 
     $(document).ready(function(){ 
     $("select#items").change(function(){ 
      var country_id = $("select#items option:selected").attr('value'); 
      $("#state").html(""); 
      $("#city").html(""); 
      if (country_id.length > 0) { 
      $.ajax({ 
        type: "POST", 
        url: "<?php echo site_url('ga_api/sample/ajax_second_dropdown');?>", 
        data: "country_id="+country_id, 
        cache: false, 
        beforeSend: function() { 
         $('#state').html('<img src="<?php echo IMAGE_PATH;?>loader.gif" alt="" width="24" height="24">'); 
        }, 
        success: function(html) {  
         $("#state").html(html); 
        } 
       }); 
      } 
      alert(country_id); 
     }); 
     }); 
    </script> 

На начеку я получаю всю строку т.е. Pack & Send.

Теперь моя функция PHP в контроллере

function ajax_second_dropdown() 
{ 
    echo $_POST["country_id"]; 
} 

Вот это как раз отголоски Pack

Я думал, может быть связано с особым характером. Но я думаю, что это не сцена, когда я пытался изменить &, %, ', \, \& и так далее, в этих случаях я получаю целую строку.

+0

Попробуйте URL закодировать строку перед передачей его Аяксу. Он работает, когда вы удаляете '&'? – user4035

+0

Попробуйте это. 'data:" country_id = "+ encodeURI (country_id),' –

+0

jQuery принимает объект для настройки своих данных, поэтому вы можете позволить ему выполнить экранирование: 'data: {" country_id ": country_id},' – Marek

ответ

6

& специальный символ: используется в query strings. Например, ?var1=x&var2=y.

Вам нужно URL-кодировать переменную перед отправкой его через HTTP:

data: "country_id="+encodeURIComponent(country_id), 
+0

Я не знаю, Понимаете, в вашем примере 'country_id' похож на' var1' в вашем первом примере. Таким образом, не будет '&', поскольку есть только параметр? –

+1

@ A.L правильно. Но если в _variable_ 'country_id' есть' & ', вторая часть (после' & ') будет рассматриваться как' var2'. – Keelan

+0

Хорошо, я вижу, спасибо. Меня смутило то, что 'country_id' должен быть числом (как и большинство идентификаторов), а не строкой. –

1

Я думаю, что у вас есть такая же проблема, как этот вопрос: Escape all special characters in a string that is sent by jquery ajax

«&» является специальным символом и вам нужно убежать от него (я не уверен в космическом персонаже, но он такой же). Используйте эту функцию (encodeURIComponent), которая позволяет избежать всех символов, кроме буквенных, десятичных цифр, - _. ! ~ * '()

Вот документация: encodeURIComponent

Ваш код:

data:"country_id="+encodeURIComponent(country_id), 
Смежные вопросы