2013-05-30 5 views
0

Je développe une application de téléphone où je dois envoyer quelques données d'un fichier html à un serveur et obtenir une sortie en réponse. Lorsque j'ai tous mes fichiers dans le serveur de sauvegarde, ils fonctionnent. Quand je divise les fichiers en machines client et serveur, ils ne fonctionnent pas et, pour autant que je sache, cela a à voir avec CROSS DOMAIN POST REQUEST. Voici mon code ci-dessous:

côté client: 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(); 
    }); }); 

côté serveur: 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(); 
} 

Comment autoriser CROSS DOMNAIN POST, je sais que je dois modifier mon fichier php serveur et j'ai ajouté le code suivant, mais je doive travailler soit

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; 
} 

En utilisant Firebug je dis mon .POST de $, ce qui est que j'ai

ResponseHeaders requestHeaders l'application Content-Type/x-www-form-urlencoded; charset = UTF-8 Accepter /

Parametersapplication/x-www-form-urlencoded code asd nom d'utilisateur qwe Source nom d'utilisateur = qwe & code = asd

réponse

La réponse est toujours vide. Cela fonctionne quand tout le html et le php sont dans le localhost ou dans mon serveur de test. Mes compétences en php et en jquery manquent d'atm, ce qui me rend très difficile à comprendre, même si quelqu'un d'autre a déjà posé la question, je suis désolé de la répéter. Ty pour vous aider

+0

Peut-être pouvez-vous utiliser getJSON de jQuery comme requête crossdomain. – machineaddict

+0

Comment puis-je envoyer des données avec getJSON j'ai besoin d'envoyer un nom d'utilisateur et mot de passe (Got it) – Surja

+0

Ne fais pas ça! Maintenant, je vois ce que vous essayez de faire. Faites le post ajax sur votre propre serveur, puis ce script envoie une requête au serveur distant. – machineaddict

Répondre

0

Les changements que je devais faire: côté client: 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(); 

}); 




}); 

les modifications du fichier sur le serveur: 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(); 
} 

Tous Je devais faire était s'assurer que le serveur a accepté toutes sortes d'en-tête et le client envoie un XMLHttpRequest et récupère la réponse html au lieu de $ .Ajax();

Questions connexes