2013-05-30 2 views
0

Я разрабатываю приложение phonegap, где мне нужно отправить некоторые данные из html-файла на сервер и получить ответ в ответ. Когда у меня есть все мои файлы на сервере сохранения, они работают. Когда я разделяю файлы на клиентские и серверные машины, они не работают, и насколько я понял, это связано с запросом CROSS DOMAIN POST REQUEST. Вот мой код ниже:

стороне клиента: something.html

$(document).ready(function() { 
$("#login").click(function(e){ 

var formData = $("#loginForm").serialize(); 

$.ajax({ 
     type: "POST", 
     url: "http://testserver.bscheme.com/rss/login.php", 
     crossDomain: true, 
    cache: false, 
     data: formData, 
     success: function(txt){ 
      if(txt !=""){    
        localStorage.setItem("background", txt); 
        //alert(localStorage.getItem("background")); 
        document.location.href="logged.html"; 
      } 
      else 
      alert("Badly Failed");   
      } 
     }); 

     e.preventDefault(); 
    }); }); 

стороне сервера: login.php

<?php 

include('inc/db.php'); 

try 
{ 
$userName  = mysql_real_escape_string($_POST['username']); 
$passcode  = mysql_real_escape_string($_POST['passcode']); 

if(empty($feedName)!="" && empty($feedUrl)!="") { 

    $result = mysql_query("SELECT id,email,password FROM user WHERE email = '".$userName."'"); 
    $row = mysql_fetch_array($result); 
    //echo $userName . $row['email']; 
// echo $passcode . $row['password']; 
    if($row['email']== $userName && $row['password'] == $passcode && $row['email']!= "" && $row['password'] != "") { 
     echo $row['id']; 

    }else{ 
     echo "fail"; 
    } 
} else { 
echo "All fields are mandatory!"; 
} 
} 
catch(Exception $e) 
{ 
// normally we would log this error 
echo $e->getMessage(); 
} 

Как разрешить CROSS DOMNAIN POST, я знаю, что я должен отредактируйте файл php на сервере, и я добавил следующий код, но я не знаю, как работает

switch ($_SERVER['HTTP_ORIGIN']) { 
case 'http://localhost/rss': case 'https://localhost/': 
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 
header('Access-Control-Max-Age: 1000'); 
header('Access-Control-Allow-Headers: Content-Type'); 
break; 
} 

С помощью Firebug я сказать мой $ .post и это то, что у меня есть

ResponseHeaders RequestHeaders Content-Type применение/х-WWW-форм-urlencoded; кодировка = UTF-8 Accept /

Parametersapplication/х-WWW-форм-urlencoded код доступа ASD имя пользователя QWE Источник имя пользователя = QWE & кода доступа = ASD

отклика

Отклик всегда пусто. Он работает, когда все html и php находятся в локальном хосте или на моем тестовом сервере. У меня не хватает навыков php и jquery, поэтому очень сложно понять, если кто-то еще задал вопрос, я сожалею о повторении. Ty вам помочь

+0

Возможно, вы можете использовать getJSON из jQuery в качестве запроса crossdomain. – machineaddict

+0

Как я могу отправить данные с помощью getJSON Мне нужно отправить имя пользователя и пароль (Получил) – Surja

+0

Не делайте этого! Теперь я вижу, что вы пытаетесь сделать. Сделайте сообщение ajax на свой собственный сервер, затем этот скрипт отправит запрос на удаленный сервер. – machineaddict

ответ

0

изменения я должен был сделать: Client Side: something.html

$(document).ready(function() { 
$("#login").click(function(e){  
    var formData = $("#loginForm").serialize();  

var username; 
var passcode; 
username= document.getElementById('username').value; 
passcode = document.getElementById('passcode').value; 



    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) 
    { 
     var txt; 
     txt=xmlhttp.responseText; 
     //alert(txt); 
     localStorage.setItem("background", txt); 
     document.location.href="logged.html"; 
    } 
} 
xmlhttp.open("GET","http://testserver.bscheme.com/rss/login.php?username="+ username +"&passcode="+ passcode,true); 
xmlhttp.send(); 

}); 




}); 

Изменения в файл на сервере: login.php

<?php 


header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 
header('Access-Control-Max-Age: 1000'); 
header('Access-Control-Allow-Headers: Content-Type'); 


include('inc/db.php'); 

try 
{ 
$userName  = mysql_real_escape_string($_GET['username']); 
$passcode  = mysql_real_escape_string($_GET['passcode']); 

if(empty($feedName)!="" && empty($feedUrl)!="") { 

    $result = mysql_query("SELECT id,email,password FROM user WHERE email = '".$userName."'"); 
    $row = mysql_fetch_array($result); 
    //echo $userName . $row['email']; 
// echo $passcode . $row['password']; 
    if($row['email']== $userName && $row['password'] == $passcode && $row['email']!= "" && $row['password'] != "") { 
     echo $row['id']; 

    }else{ 
     echo "fail"; 
    } 
} else { 
echo "All fields are mandatory!"; 
} 
} 
catch(Exception $e) 
{ 
// normally we would log this error 
echo $e->getMessage(); 
} 

Все я должен был сделать, чтобы убедиться, что сервер принял все виды заголовков, и клиент отправляет XMLHttpRequest и возвращает ответ html вместо $ .Ajax();

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