2013-10-09 2 views
1

У меня есть требование, которое получает данные Json с перекрестными доменами через Ajax. Мне нужно поддерживать 2 разных сервера (сервер A и сервер B).Данные Ajax для перекрестных доменов

Сервер A содержит только статическое содержимое. ie: JS, Images, Css

Сервер B содержит только динамическое содержимое т.е. php driven

Согласно вышеизложенному, я настроил и успешно настроил среду Nginx + Apache на моем локальном компьютере.

У меня есть два домена на моем локальном хосте.

Сервер: http://localhost:9000/> работает на Nginx как передний конец для статического контента

Сервер Б: http://localhost:8888/> работает на Apache в качестве задней части для динамического контента (т.е. PHP)

Сервер содержит

index.html jquery и пользовательский Ajax обработка java script.

index.html

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<script src="./js/jquery-1.7.2.min.js" type="application/javascript"></script> 
<script src="./js/script.js" type="application/javascript"></script> 
<title>Ajax</title> 
</head> 
<body> 
<div id="result"></div> 
</body> 
</html> 

script.js

$(document).ready(function(e) { 
    var url = 'http://localhost:8888/drp/application/ajax.php'; 
     var success = function(data){ 
     var set = ""; 
      set += "Name: "+ data['fname']+ " " + data['lname']+"<br>"; 
      set += "Age: "+ data['age']+"<br>"; 
      set += "Address: "+ data['address']+"<br>"; 
      set += "Email: "+ data['email']+"<br>"; 
      set += "Web: "+ data['web']+"<br>"; 
      $('#result').html(set); 
    }; 

    var error = function(jqXHR, textStatus, errorThrown){ 
      //alert(errorThrown); 
      alert('errorThrown'); 
    }; 

    $.ajax({ 
      type: 'GET', 
      url: url, 
      data:{todo:"jsonp"}, 
      dataType: "jsonp", 
      crossDomain: true,   
      cache:false, 
      success: success, 
      error: error 
    }); 
}); 

Сервер 2 содержат ajax.php который обработать запрос Ajax

ajax.php

<?php 
#header('Content-Type: application/json'); 
header('Content-Type: application/javascript'); 



$x = array(

    'fname' => 'Jone', 
    'lname' => 'Max', 
    'age' => '26', 
    'address' => 'London,Uk', 
    'email' => '[email protected]', 
    'web' => 'http://jonemaxtest.com', 

); 

print json_encode($x,true); 
?> 

Когда я звоню это передний конец index.html, я могу увидеть ошибку, как этот

SyntaxError: missing ; before statement 
{"fname":"Jone"...} 

Я попытался так, возможно, время, но я и не получить правильный результат. каждый раз, когда я получаю такое сообщение об ошибке. также я попытался изменить заголовок («Content-Type: application/javascript»); в заголовок ('Content-Type: application/json'); но не работает.

где я сделал свою ошибку в этом наборе кода ...?

Пожалуйста, помогите мне.!

ответ

2

Попробуйте возвращающей строку с сервера, который, как:

$data = json_encode($x); 
echo "/**/my_callback($data);"; 

Где данные ваш JSON закодированный массивом.

И не забудьте удалить заголовок для типа содержимого.

В вашем JavaScript в запросе Ajax, на успех:

function (data) {eval(data);} 
2

Есть некоторые ошибки в коде

  • Вы должны установить dataType="json" вместо "jsonp" в вашем АЯКС вызова, так как вы передаете json

    Исправленный код ниже

    $(document).ready(function(e) { 
        var url = 'http://localhost:8888/drp/application/ajax.php'; 
         var success = function(data){ 
         var set = ""; 
          set += "Name: "+ data['fname']+ " " + data['lname']+"<br>"; 
          set += "Age: "+ data['age']+"<br>"; 
          set += "Address: "+ data['address']+"<br>"; 
          set += "Email: "+ data['email']+"<br>"; 
          set += "Web: "+ data['web']+"<br>"; 
          $('#result').html(set); 
        }; 
    
        var error = function(jqXHR, textStatus, errorThrown){ 
          //alert(errorThrown); 
          alert('errorThrown'); 
        }; 
    
        $.ajax({ 
          type: 'GET', 
          url: url, 
          data:{todo:"jsonp"}, 
          dataType: "json", 
          crossDomain: true,  
          cache:false, 
          success: success, 
          error: error 
        }); 
    }); 
    
    • В вашей ajax.php вы установили заголовок, как application/javascript, но ваши данные json так изменить его application/json и вы также должны добавить еще один заголовок, чтобы Междоменное header('Access-Control-Allow-Origin: *');.

      Вот исправленному код

      <?php 
          header('Access-Control-Allow-Origin: *'); 
          header('Content-Type: application/json'); 
          $x = array(
      
          'fname' => 'Jone', 
          'lname' => 'Max', 
          'age' => '26', 
          'address' => 'London,Uk', 
          'email' => '[email protected]', 
           'web' => 'http://jonemaxtest.com', 
      
          ); 
      
           print json_encode($x,true); 
           ?> 
      

Надеется, что это помогает, спасибо

+0

Здравствуйте Sarath ваших исправлений точно правильно. он работает для меня. Большое спасибо. – Umanda

+0

добро пожаловать. Если это поможет, отметьте ответ как правильный. – SarathSprakash

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