2015-07-29 1 views
1

Я снимаю волосы с этой проблемой: Я отправляю некоторые данные из формы из одного домена в другой с помощью JSONP, он отлично работает на моем локальном хосте, но просто не работает на сервере. Я использую CodeIgniter 2.X для бэкэнд. Вот код:Извлечение JSONP в PHP не работает

var telefono = $('#telefono').val(); 
     var email = $('#email').val(); 
     var mensaje = $('#mensaje').val(); 
     $.ajax({ 
      url: 'http://www.example.com/site/admin/index.php/controller/save', 
      type: 'POST', 
      dataType: 'jsonp', 
      data: JSON.stringify({nombre:nombre,telefono:telefono,email:email,mensaje:mensaje,idPropiedad:46}), 
      cache: false, 
      processData: false, 
      crossDomain: true 
     }) 

На CodeIgniter:

$info = json_decode(file_get_contents("php://input")); 
var_dump($info); 

Вот как я получить данные, он работает как шарм на моем локальном хосте. Тем не менее я получаю NULL на этом сервере. Я также попытался сбросить массив $ _POST, ничего там.

Это то, что я получаю демпинг массив $ _GET:

array(3) { 
    ["callback"]=> 
    string(42) "jQuery1111037374000856652856_1438207931357" 
    ["{\"nombre\":\"fasf\",\"telefono\":\"asfasfasfas\",\"email\":\"asfasfas\",\"mensaje\":\"fasfasfa\",\"idPropiedad\":46}"]=> 
    string(0) "" 
    ["_"]=> 
    string(13) "1438207931360" 
} 

Я также попытался передавать данные с FormData() во внешнем интерфейсе, ничего.

Это то, что посылается:

Request URL:http://www.example.cl/site/admin/index.php/controller/save?callback=jQuery1111037374000856652856_1438207931357&{%22nombre%22:%22fasf%22,%22telefono%22:%22asfasfasfas%22,%22email%22:%22asfasfas%22,%22mensaje%22:%22fasfasfa%22,%22idPropiedad%22:46}&_=1438207931359 
Request Method:GET 
Status Code:200 OK 

Есть идеи? Заранее спасибо.

+0

же версии JQuery на обоих местах? –

+0

Вы уверены, что путь в '$ info = json_decode (file_get_contents (" php: // input "));' правильный? Я не знаю ни одного 'php: // input' ... –

+0

' php: // input' должен работать - я использую это регулярно. Попробуйте вместо этого использовать 'dataType: 'json'' и посмотрите, не изменит ли это что-либо. '$ .ajax' api для 'jsonp' говорит:« Загружает в блок JSON с помощью JSONP. Добавляет дополнительный «? callback =?» в конец вашего URL для указания обратного вызова. Отключает кеширование, добавляя параметр строки запроса, "_ = [TIMESTAMP]", если для параметра кеша установлено значение true. " –

ответ

0

Использование POST с jsonp является противоречием. Как вы можете видеть, используется GET. Остальные ваши данные недоступны (ну, как минимум, трудно получить доступ), потому что вы их стробили. Если вы просто передадите объект, не подверженный атаке, jQuery превратит ваш объект в пары ключ/значение в URL.

var telefono = $('#telefono').val(); 
var email = $('#email').val(); 
var mensaje = $('#mensaje').val(); 
$.ajax({ 
    url: 'http://www.example.com/site/admin/index.php/controller/save', 
    dataType: 'jsonp', 
    data: { 
     nombre: nombre, 
     telefono: telefono, 
     email: email, 
     mensaje: mensaje, 
     idPropiedad: 46 
    } 
}); 

Затем, вы можете получить доступ к данным с помощью:

$nombre = $_GET['nombre']; 
$telefono = $_GET['telefono']; 
... etc 
+0

Да, это логичный способ. К сожалению, что-то действительно странное происходит либо с моим кодом, либо с моими серверами. Вот почему мне пришлось использовать «CORS». Спасибо за ответ. – user2430929

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