2015-08-18 4 views
3

Я хочу отправить запрос POST, передавая URL среди других параметров. У меня есть следующий скрипт, но он не работает.Кодировка параметра XMLHttpRequest POST

var params = "param1="+param1_value+"&url="+url_value; 

var xhr = new XMLHttpRequest(); 
xhr.open("POST", action_url, true); 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xhr.onreadystatechange = function(){ 
    if(xhr.readyState == 4 && xhr.status == 200){ 
    console.log("Done"); 
    } 
} 
xhr.send(params); 

Предполагая, что url_value что-то вроде этого:

https://www.domain.com/blah?param=&email=domain%40email%2Ecom&blah=1234 

, что было бы неправильно с этим сценарием?

+0

http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object –

ответ

1

Взгляните на этот вопрос/ответ - Should I URL-encode POST data?

Ваше значение образца для url_value использует HTML Entity Code. Из-за символа & в значении оно отправляется как несколько значений. Вы, вероятно, нужно URL закодировать его, так это выглядит, как этот

https%3A%2F%2Fwww.domain.com%2Fblah%3Fparam%3D%26email%3Ddomain%40email.com%26blah%3D1234

+0

Я думаю, что проблема заключается в кодировке как ну, однако я просто закодировал url как то, что вы предложили, но ничего еще. –

+0

Когда вы говорите «ничего еще», что это значит? Проходит ли запрос? ваш сервер не получает ожидаемые данные? –

+0

запрос не прошел. –

0

У вас может возникнуть проблема при попытке получить доступ к другому домену/веб-сайту. Принимающая сторона должна иметь заголовок Access-Control-Allow-Origin в своем обратном сообщении.

Возможно, вы нашли решение в this answer.

+0

Предполагая, что 'Access-Control_Allow_Origin' не существует, могу ли я отправить html-форму с помощью те же параметры для одного и того же домена/веб-сайта? Причина, если я создам эту форму html, запрос будет успешным. Проблема в этом XMLHttpRequest. –

+0

Да, вы можете. Хотя я бы рекомендовал вам использовать jQuery, потому что тогда вы можете использовать '$ ('form'). Serialize()' для передачи через 'xhr.send()'. Хотя я думаю, что было бы лучше использовать функцию '$ .ajax()' jQuery, как описано [здесь] (http://api.jquery.com/jquery.ajax/) – LaVomit

0

Вы отсутствующая котировка на значение строки URL-адреса, оповещать строку параметров, как показано ниже

вара PARAMS = «param1 = '» + param1_value + "'& url ='" + url_value + "'";

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