2012-11-08 3 views
11

안녕하세요 여러분과 고맙습니다. PhoneGap 2.1.0을 사용하고 있습니다.Ajax 게시물이 작동하지 않습니다. - Jquery Phonegap Android

var postData = $(this).serialize();    
       $.ajax({ 
        type: 'POST', 
        url: 'http://--/smartphone/login.php', 
        dataType : 'json', 
        data: postData,   
        success: function(data){ 
         alert("good"); 
        }, 
        error: function(){ 
         alert('problem!'); 
        } 
       }); 

PHP 파일이 같은 디버그 이유로 그냥 : 화이트리스트 다에서 는

**<access uri="*" subdomains="true" /> 
<access origin=".*" subdomains="true"/>** 

내가 내 대학 웹 서버에서 원격 PHP 파일을 호출하는이 기능을 사용하고 있습니다 .. 허용됩니다 :

01 :

<?php 
header('Content-Type: application/json'); 
$sample = array(
    'name'=>'My Name', 
    'email'=>'[email protected]' 
); 
echo json_encode($sample); 
?> 

그러나 아약스 요청은 내가 제출을 클릭하면이 오류가 계속 이클립스 .. 일이되지 않는다

JSCallback Error: Request failed with status 0 at file:///android_asset/www/js/cordova-2.1.0.js:3743 

무엇보다, 추가하는 것을 잊어 버렸습니다. 에뮬레이터의 링크로 URL을 열 수 있다는 것입니다. 정상적으로 작동합니다.

이 * HTML 코드 : 나는 검색 한 *

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" type="text/css" href="css/index.css" /> 
    <script type="text/javascript" charset="utf-8" src="js/cordova-2.1.0.js"></script> 
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <title>Smart Greenhouse</title> 
</head> 
<body> 
    <div id="container"> 
     <img src="css/images/smart_green_house.png" class="logo" alt="l1ogo" /> 
     <form id="login_form" class="first_display" > 
      <label class="title"> E-mail:</label> 
      <input id="1" type="email" class="input" size="45" name="email" /> 
      <label class="title"> password:</label> 
      <input id="2" type="password" class="input" size="45" name="password" /> 
      <input id="3" class="submit_type" type="submit" value="login" /> 
     </form> 
    </div> 
</body> 
</html> 

나는 거의 모든 웹 생각은 ... 이일은 ... 모든 것이 많이 고맙습니다 .. 을 테스트되었습니다들을 검색.

+1

'http : // -/smartphone/login.php'이 유효한 URL입니까? 그것은 나처럼 보이지 않습니다. –

+1

- mydomain.example.com과 같은 도메인 ..을 나타냅니다. 오해 된 경우 사과드립니다. – gnnpls

+0

PHP 측에서 "Access-Control-Allow-Origin : *"HTTP 헤더를 추가하여 작동하는지 확인하십시오. – onon15

답변

3

마지막으로 4 ~ 5 일이 지난 후에 검색 중 ... 나에게 맞는 것이 었습니다. 그냥 Ajax 콜백 후 return false을 추가했습니다.

$('form').submit(function(e){  
    if (password_ok==1 && email_ok==1) 
      { 
       var postData = $(this).serialize(); 
       $.ajax({ 
        type: 'POST', 
        url: 'http://mysite.xx.x/smartphone/login.php', 
        dataType : 'json', 
        data: postData,   
        success: function(data){ 
         alert(data); 
        }, 
        error: function(){ 
         alert('error!'); 
        } 
       }); 
      } 
     else 
      { 
      e.preventDefault(); 
      if (email_ok==2) 
       { 
       $("#1").css("border-color","red"); 
       $("#1").css("background-color","#FFD8CE"); 
       } 
      if (password_ok==2) 
       { 
       $("#2").css("border-color","red"); 
       $("#2").css("background-color","#FFD8CE"); 
       } 
      } 
    return false;  
    }); 

이제 유일한 문제는 한 번에 한 단계 씩 ...

2

이유는 "양식 제출"때문이라고 생각합니다. 아약스 코드는 어디에 두셨습니까? index.js에?

예외가 있다는 것은 "0 == 페이지가 언로드되었음을 의미합니다."

귀하의 경우, 양식과 동일한 페이지에있는 index.js에 아약스 코드를 넣으십시오. 양식을 제출하면 양식 제출 결과와 함께 현재 페이지를로드 해제하고 페이지를로드하기 시작합니다. 따라서 귀하의 아약스 코드는 예외가 "페이지가 언로드 중"이됩니다.

양식 제출을 사용하지 마십시오.

+0

마크는 시험을 위해 많이 고맙습니다.하지만 둘 다 시도했지만 아무 일도 없었습니다. 에로기가 무엇인지 압니다. 내 androidmanifest.xml 파일이나 cordova.plist에 뭔가있을 수 있습니까? – gnnpls

+0

나는 결코 작동하지 않을 것이라고 생각한다. .. 내가 왜 localhosts에서 작동하는지 모르겠다. .. 문제가 있을지도 모른다. .. – gnnpls

+0

실제로 "form"을 제거하면 아약스가 php를 직접 호출하게한다. . 예를 들어, deviceready event listner 함수에 ajax 호출을 추가 할 수 있습니다. 그리고 그 결과를 봅니다. – mark

3

1 단계을 successful..but 때 페이지를 다시하지 않는다는 것입니다 : 당신이 필요로하는 그리고 난 다음과 같은 코드를 변경 당신의 PHP 파일

header('Content-Type: application/json'); 
header("Access-Control-Allow-Origin: *"); 

2 단계에 두 개의 헤더를 포함합니다 : 그리고 당신의 인덱스 페이지에서 CDN의 jQuery 라이브러리를 포함한다.

3 단계 : 사용 스크립트가 성공적으로

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('form').submit(function(e) { 
      var postData = $(this).serialize(); 
      $.ajax({ 
       type : 'POST', 
       url : 'http://www.yoururl/test.php', 
       dataType : 'json', 
       data : postData, 
       success : function(data) { 
        alert(data); 
       }, 
       error : function() { 
        alert('error!'); 
       } 
      }); 

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

내가 폰갭에서 그것을 테스트하고 그것을 잘 작동 양식을 게시 할 수 있습니다.

관련 문제