2013-11-27 3 views
0

Im пытается сделать запрос с одного сервера на другой с помощью json и php.Запрос Json в другой домен

мой HTML-страница:

$.ajax({ 
      type: "POST", 
      url: "https://api.domain.com/gateway/partners/create_account.ajax.php", 
      dataType: 'jsonp', 
      crossDomain: true, 
      data: { "name" : "Test name"}, 
      success: function(data) 
      { 
       console.log(data.responseText); 
      } 
      }); 

Мой PHP выглядит следующим образом:

$name = $_GET['name']; 
$data = array("Hello", $name); 

echo json_encode($data); 

Я хочу получить на моей консоли: имя Hello Test

Что я сделал не так?

+0

какая ошибка у вас? –

+0

Вы не можете использовать запрос JSONP и POST: Смотрите это: http://stackoverflow.com/questions/2699277/post-data-to-jsonp – Cyrus

ответ

3

Вы:

  1. указал JQuery, чтобы обработать ответ как JSONP
  2. Написание PHP, который будет выводиться в формате JSON (не JSONP) ... предположительно с text/html типа контента.
  3. Попытка сделать запрос POST вместо запроса GET. JSONP поддерживает только GET.
  4. Пытается обработать данные, возвращенные запросом, как если бы это был объект XHR.

Минимальный пример ответа JSONP будет:

<?php 
header("Content-Type: application/javascript"); 
$name = $_GET['name']; 
$data = array("Hello", $name); 

echo $_GET['callback']; 
echo "("; 
echo json_encode($data); 
echo ");"; 

Затем вам нужно изменить JS, так что type: "POST" становится type: "GET" и console.log(data.responseText); становится console.log(data);

В качестве альтернативы можно использовать another technique to bypass the same origin policy и все еще используйте POST.

+0

Thnx, это сработало! –

0

jsonp - старая практика и небезопасная, потому что любой может позвонить вашему сценарию. По умолчанию очень часто возникают ошибки при сбое вызова jsonp.

Вы можете реализовать заголовки CORS в своем запросе, а затем вы можете использовать простой XHR-вызов.

Addeding заголовок:

Access-Control-Allow-Origin: * 

Будет ли устранить проблему, но лучше использовать точный домен вместо шаблона.

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