Как вы отправляете необработанные строки через запрос JQuery POST? - PullRequest
3 голосов
/ 05 февраля 2012

Я пытаюсь отправить необработанную строку через jQuery.ajax ()

например,

contact_list=352345

У меня есть

$.ajax({
        beforeSend: function(xhr){
            xhr.setRequestHeader('Content-Type', header);
        }
        },
        url: link,
        type: type,
        processData:false,
        data: data,
        success: function(data){
            console.log(data);
        }
     });

Most времени я отправляю данные JSON, поэтому header='application/json'

На стороне сервера я повторяю $HTTP_RAW_POST_DATA и вижу мою строку JSON просто отлично.

Однако иногда мне хочетсяотправлять обычные данные формы тоже.Но когда я устанавливаю header='application/x-www-form-urlencoded' $HTTP_RAW_POST_DATA пусто.

ProcessData ложно, поэтому не должен ли он просто пропустить мою строку?

В качестве временного решения япросто оставив заголовок как application/json и игнорируя Content-Type на сервере для этой конкретной конечной точки.

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Я бы лучше отправил флаг моей функции javascript, чтобы увидеть, какой тип ввода

так ваша функция будет выглядеть так

function processIt(request_type,link,type,data) {
if(request_type == 'json')
$.ajax({
    beforeSend: function(xhr){
        xhr.setRequestHeader('Content-Type', header);
    }
    },
    url: link,
    type: type,
    processData:false,
    data: data,
    success: function(data){
        console.log(data);
    }
 });
else 
 $.ajax({
url: link,
data: data,
success: function(data){
    //do something
}
 });
}

Но это если вы хотите использовать свою функцию как есть.

1 голос
/ 05 февраля 2012

Никакой дополнительной работы не требуется.Попробуйте это:

$.ajax({
    url: link,
    data: data,
    success: function(data){
        console.log(data);
    }
 });

документы :

processDataBoolean:

По умолчанию: true По умолчанию данные передаются в параметр данныхкак объект (технически, что угодно, кроме строки) будет обработан и преобразован в строку запроса, соответствующую типу содержимого по умолчанию «application / x-www-form-urlencoded».Если вы хотите отправить DOMDocument или другие необработанные данные, установите для этого параметра значение false.

0 голосов
/ 05 февраля 2012

PHP $HTTP_RAW_POST_DATA недоступно с enctype = "multipart / form-data". http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

Итак, теперь на сервере я делаю следующее:

if (count($_POST == 0){
    $raw = file_get_contents('php://input');    
}else{
    $raw = '';
    foreach($_POST as $key => $value) {
        $raw = $raw.$key.'='.$value.'&';
    }
}

Кажется, работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...