2010-06-17 2 views
2

AJAX를 조금만 사용해 본 결과 많은 데이터가 밑줄로 흩어져있는 것을 발견했습니다! 문서는 이것이 의도 한대로 작동하고 있음을 확인합니다. 내 양식 정보를 그대로 PHP로 전달하는 방법은 무엇입니까? 나는 CodeIgniter를 사용하고, 그래서 내 패스/컨트롤러/기능/변수처럼, 컨트롤러를 수신 같습니다외부 소스의 변수 이름에있는 점과 공백이 밑줄로 변환됩니다.

controller{ 
function($v=0){#what once was hello world is now hello_world...} 
} 

내가 아주 잘 실행 취소 할 수 없습니다, 데이터가 밑줄을 포함 할 수 있습니다.

감사합니다, 브랜든

편집 :

나는 그것이 값을 변환 생각합니다.

<form> 
<text input name="tbox"/> 
<submit/> 
</form> 

ajax_handler(
    v = form.name() + form.val() 
    do_ajax('/controller/function/v') 
) 

controller(){ 
    function($v=0){#spaces and periods in v are converted to underscore} 
} 

다시 한번 감사, 여기 브랜든

실제 코드입니다 : 컨트롤러의 기능에 전달되는 문자열의

<input type="text" id="tusername" name="tusername" class="checkable tbox"/> 
<button id="unsubmit" name="wizard" class="formable">next</button> 


     $('.formable').live('click',function(event){ 
      event.preventDefault(); 
      var n = $(this).attr('id'); 
      var a = $(this).attr('name'); 
      var v = dosend(); 
      $.ajax({ 
        url: '/form/'+n+'/'+v, 
        type: 'post', 
        success: function(result){ 
         alert(result); 
        } 
      }); 
      function dosend(){ 
        var inputs = $(":input"); 
        var s = ""; 
        inputs.each(function(){ 
          s += $(this).attr('name')+":"; 
          s += $(this).val()+";"; 
        }); 
        return s; 
      } 
    }); 

    class Form extends Controller{ 
     function Form(){ 
      parent::Controller(); 
      session_start(); 
     } 
     function unsubmit($v=6){ 
      print $v; 
     } 
    } 

아무거나 여기에 코드의 요점이다 공백이나 마침표는 밑줄로 변환됩니다. 이 상자에 hello world를 입력하면 hello_world가 출력됩니다.

  $w = explode(';',$v); 
      foreach($w as $i){ 
        $x = explode(':',$i); 
        if(isset($x[1])){ 
         $_AJAX[$x[0]] = $x[1]; 
        } 
      } 
+0

왜 처음에는 변수 이름에 점이 있습니까? –

+0

나는 값으로 만 ... 나는 의사가 왜 값이 아닌 변수 이름을 언급하고 있다는 것을 알았는데 왜 이것이 일어나고 있는지 궁금해하니? – Orbit

답변

0

보존해야하는 경우 다른 것으로 보내기를 고려하면 application/x-www-form-urlencoded 또는 multipart/form-data입니다. 예를 들어,이 훌륭한 질문자는 JSON을 사용하여 여가에서 구문 분석 할 수 있습니다. handle json request in PHP

JSON은 구문 분석하기가 더 쉽습니다. 그러나 application/x-www-form-urlencoded 양식 (파일 업로드를 처리하지 않음) file_get_contents('php://input')을 사용할 수 있으며 원하는대로 문자열을 구문 분석 할 수 있습니다.부재중 Get raw post data


은 " '단지로 키와 값을 분리 게시물을 사용하고 있습니다 : 더러운, 더러운 해킹으로

은,이 또한 multipart/form-data 위해 일할 수 지난 주 말 할 기뻐했다 : '및 쌍으로'; ' "Apparantly 히이의

<?php 
    $post = file_get_contents('php://input'); 
    $pairs = explode(':',$post); 
    $values = array(); 
    foreach($pairs as $pair){ 
     $vars = explode(':',$pair,2); 
     $values[$vars[0]] = $vars[1]; 
    } 
    ?> 
+0

답장을 보내 주셔서 감사합니다 ... 조금 혼란 스럽습니다 ... 위와 같은 AJAX를 사용하여 문자열을 전달하면이 문자열을 변수 이름으로 간주합니까? 난 그냥 게시물을 사용하여, 키와 값을 ':'로 분리하고 ';'와 쌍으로, PHP 측에서 데이터를 읽는 파서를 만들었습니다. – Orbit

+0

수정 사항을 반영하도록 수정되었습니다. – Wrikken

+0

신난다, 고마워. 위에 추가 된 코드로 구문 분석했습니다 (사실상 동일합니다). – Orbit

0

PHP는 데이터가 아닌 변수 이름을 변환합니다.
필드 이름을 변경할 수 있습니까?

+0

컨트롤러에 전달 된 모든 값을 변환하는 것으로 보입니다. 그것은 나의 모든 양식 입력에 일어나고있다. – Orbit

0

알고있는 한, 아니오.

주 : 점과 변수 이름에 공백이 밑줄로 변환됩니다 당신이 말한 마찬가지로 Variables From External Sources PHP 매뉴얼 페이지에 설명 된대로

, PHP는 변수의 이름을 변경한다. 예 : < 입력 이름 = "a.b"/ > 은 $ _REQUEST [ "a_b"]가됩니다.

왜 이렇게 달라질 지 모르겠습니다. 해당 변수에 저장된 데이터는 변경되지 않습니다.

1

찾을 언급 http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/에서 지금 해결 :

 $.ajax({ 
       url: '/form/'+n+'/'+v, 
       type: 'post', 
       contentType: 'text/plain', //<-- add this 

은 아마도 이것에 의해 구문 분석합니다.

URI 세그먼트를 통해 전달되는 값의 기간은 특정 조건에서 잘못 밑줄로 변환 될 수 있습니다. 이 일이 일어나려면 mod_rewrite를 사용해야하며 RewriteRule 지시문은 다시 작성된 세그먼트를 쿼리 문자열을 통해 전달합니다. 예 :

RewriteRule ^(.*)$ /index.php?/$1 [L] 

구성 값 uri_protocol을 수정해야합니다. 기본값은 'AUTO'입니다. 'QUERY_STRING'(으)로 설정해야합니다. 예 :

$config['uri_protocol'] = 'QUERY_STRING'; 
+0

나는 대답을 upvoted 그러나 부차적 인 손상이'자동'에서'QUERY_STRING'로 전환함으로써 발생할 수있는 것이 무엇인지 아는 것이 좋을 것입니다. – Madbreaks

관련 문제