2015-02-02 3 views
1

Ajax 요청을하려고하는데 보내려는 매개 변수가 전송되지 않았습니다. 그래서 나는이 제대로 값을 검색 할 것 Ajax가 올바른 매개 변수를 전송하지 않습니다.

<script> 
function showUser(str) { 

    if (str=="") { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
    if (window.XMLHttpRequest) { 
    // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } else { // code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
    document.write(str); 
    xmlhttp.open("GET","getuser.php?q="+str,true); 
    xmlhttp.send(); 
} 
</script> 
<form> 
<select name="users" onchange="showUser(this.value)"> 
<option value="">Select a person:</option> 
<option value="1">John Smith</option> 
<option value="2">Lois Griffin</option> 
<option value="3">Joseph Swanson</option> 
<option value="4">Glenn Quagmire</option> 
</select> 
</form> 

user.php 있습니다. Joseph Swanson을 선택하면 3이 표시됩니다. 내가 getUser.php

<?php 
$q = intval($_GET['q']); 
var_dump($q); 
?> 

에 갈 때 나는 int 0 때마다 얻을. 무엇이 문제입니까?

+0

시도해보십시오'$ q = $ _GET [ 'q']; 에코 $ q를, 당신의 XMLHttpRequest의와 결합하면 그냥 잘 작동합니다' –

+0

는 문제는 이렇게 정의되는 것을 (단지'getUser.php')를 일반적으로 페이지에 액세스하려고하는 것입니다. http://codepad.viper-7.com/a7eRcw – Ghost

답변

0

intval로 지정하기 전에 값이 숫자인지 확인하십시오. 여기에 PHP documentation에서입니다 :

반환 실패 성공

VAR의 정수 값을 값, 0. 빈 배열은 0, 비어 있지 않은 배열이 최대 값은 시스템에 따라 1

돌아 돌아 . 그래서 이러한 시스템에서, 예를 들어 INTVAL는 ('1000000000000')가 반환 2147483647 64 개 비트 시스템에 대한 최대 부호있는 정수 값이 9223372036854775807.

32 비트 시스템 -2147483648 2147483647 최대 부호있는 정수 범위를 가질

문자열의 가장 왼쪽 문자 인 에 따라 다르지만 대부분 문자열은 0을 반환합니다. 정수 캐스팅의 공통 규칙은 입니다.

AJAX 대신 JQuery를 사용하는 것이 좋습니다. 학습 할 때 훨씬 쉽게 이해할 수 있습니다. 이것은 적어도 그들이 얘기하는 것을 당신에게 말할 것이다

echo $_POST['q']; 
exit; 

//add JQuery// 
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script> 
<script> 
function showUser(str) { 
    $(function() { 
     $.ajax({ 
      url: "/getuser.php", //assumes file is in root dir// 
      type: "post", 
      data: "q="+str, 
      processData: false, 
      success: function(response) { 
       alert ("processed"); //alerts that PHP processed the request// 
       $("#txtHint").html(response); //inserts echoed data into div// 
      } 
     }); 
    }); 
} 
</script> 

그런 다음 PHP 파일에 추가하려고

.... 하지만 화면에 표시되지 않을 것입니다. 개발자 도구 -> 네트워크 -> 응답 (그러나 #txtHint에 있어야합니다)을 살펴 봐야합니다. 응답을 받으면이를 제거하고 정상적으로 시도하십시오.

편집 :
는 또한 전송되고 있는지 확인 요청에 대한 개발자 도구에서 네트워크 탭을 선택합니다.

+0

내가 네 방식대로하면 나는 널이된다. 나는 정말로 문제가 어디 있는지 이해하지 못한다. – dres

+0

변수가 비어있을 가능성이 높습니다. 대답을 수정합니다. – EternalHour

+0

이제'string 'empty'(길이 = 5)'왜 작동하지 않습니까? – dres

0

페이지에 평상시에 액세스 할 때 쿼리 문자열에 q과 같은 것이 없기 때문에 발생합니다. 추가 -

if (!empty($_GET['q'])) { 
    $q = intval($_GET['q']); 
    var_dump($q); 
} 

이제 URL에 매개 변수가있는 경우에만 표시됩니다.

+0

변경했는데 어떤 줄에 'Undefined variable : q' – dres

+0

이 나옵니까? –

+0

해당 페이지의 다른 곳에서'$ q'를 사용하고있을 수 있습니다. 수표를 추가하면 수정 될 것입니다. –

관련 문제