2013-05-02 5 views
3

Я пытаюсь выполнить AJAX некоторые POSTed данные на страницу PHP, но данные не отправляются правильно. Что я делаю не так?AJAX не отправляет данные правильно

Вот мой код:

HTML функция

<a id="some_id">LINK</a> 

Ajax

mFunction(){  
    $("#some_id").click(function(){ 
     var thisId = $(this).attr('id'); 
     console.log(thisId); 
     $.ajax({ 
     type : 'POST', 
     url : 'magic.php', 
     data: {"thisId" : thisId}, 
     dataType: "json", 
     success:function(data){ 
     console.log(data); 
     } 
    });  
    }); 
} 

PHP

<?php$thatId = $_POST['thisId']; print_r($_POST); ?>

Итак, все должно работать, как я понимаю, но что-то не так. В console.log (данные) я получить идентификатор, так как данные были отправить Но в print_r я получаю массив() пустой массив ..

+0

И часть PHP где? – dbf

+0

' ' – Froxz

+0

Вы уверены, что' P' является частью ['variables_order'] (http://www.php.net/manual/en/ini.core.php#ini.variables-order)? –

ответ

4

Вы dataType: "json", так ваш аякс-вызов ожидает ответа json, и поэтому вы ничего не видите в ответ.

использование json_encode();

echo json_encode($_POST); 
+0

Я не думаю, что это проблема; Я считаю, что OP говорит, что '$ _POST' пуст. –

+0

@Jack я знаю, но вы можете видеть OP, используя тип POST и правильно размещая данные, чтобы это могло вызвать ... если есть что-то еще, дайте мне знать, чтобы я мог его исправить .. –

+0

use 'json_encode();' Я получаю [] снова пуст ... – Froxz

0

Я думаю, что эту линию:

data: {"thisId" : thisId}, 

должен быть

data: {thisId : thisId}, 
+1

Обе записи в порядке. –

+0

@Jack 'dataType' - тип данных, которые вы ожидаете от сервера, но' data' может содержать только обычный объект или строку, я ошибаюсь? – egig

+0

Да, объект или строка. В этом случае это объект; имена свойств в объектных литералах могут быть указаны (стандарт JSON) или нет. –

0

magic.php

echo json_encode($_POST); 

html.html

mFunction(){  
    $("#some_id").click(function(){ 
    var thisId = $(this).attr('id'); 
    console.log(thisId); 
    $.ajax({ 
    type : 'POST', 
    url : 'magic.php', 
    data: {thisId: thisId}, 
    dataType: "json", 
    success:function(data){ 
    console.log(data); 
    } 
    });  
    }); 
} 
1

Если $_POST пуст, который, кажется, дело здесь, вы должны взглянуть на ваш файл конфигурации, в частности настройки variables_order.

Например, если variables_order установлен в "SP" то PHP создаст суперглобальные $ _SERVER и $ _POST, но не создавать $ _ENV, $ _GET и $ _COOKIE. Установка на «" означает, что суперглобалы не будут установлены.

Убедитесь, что "P" является частью этого параметра, т.е.

variables_order = "GPCS" 

Перезапустите сервер после внесения этих изменений.

+0

Давайте попробуем. Спасибо – Froxz

+0

Не могу этого сделать .. 'успех: функция (данные) { console.log (данные); } '} Я получаю объект {link:" The_pressed_ID "} Но его функция успеха так должна работать ((( – Froxz

+0

@Froxz Вы сказали, что видели пустой массив, кроме того, код PHP, который вы разместили в вопросе, t, похоже, действительно дает этот результат в первую очередь. –

0

При запросе параметров сусле сервера является объектом,

данные:

{thisId: "abc"}

нет:

{"thisId": "abc"}

А почему бы вам не поставить другое имя для thisId var в этом случае?

var thisId = $(this).attr('id'); в

var tId = $(this).attr('id');

и его использование:

$.ajax({ 
    type : 'POST', 
    url : 'magic.php', 
    data: {thisId: tId}, 
    dataType: "json", 
    success:function(data){ 
    console.log(data); 
    } 
    }); 

Оно совпадает с именем объекта, переданного на ключевой пост, я не уверен, что это может быть повторен или нет, но я не выбираю одно и то же имя.

+0

{thisId: thisId} можно использовать. –

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