2017-01-18 2 views
0

Я пытаюсь сделать форму, которая отправляет запрос и публикует результат на странице. У меня есть данные для тела запроса, URL-адреса и заголовков. Но у меня проблема с заголовками. Я не знаю, как преобразовать строку:конвертировать строку из textarea в запрос заголовков

Content-Type : application/x-www-form-urlencoded 

в

{"Content-Type" : "application/x-www-form-urlencoded"} 

динамически. В моем текстовое поле я мог бы 3-4 слушающие расщепляется запятой, так как преобразовать эти заголовки в структуру, которая будет принята этой функции:

function makePostRequest(url, data, headers, httpVerb, dataType, elementId){ 
    alert(headers); 
    $.ajax({ 
    url: url, 
    type: httpVerb, 
    data: data, 
    headers: {headers}, 
    dataType: dataType, 
    success: function (data, textStatus, jqXHR) { 
     $("#div").val(jqXHR.responseText); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { $("#div").val(jqXHR.responseText); } 
    }); 
} 

Мой TextArea элемент может содержать заголовки, как:

header1 : content1, header2 : content2 

ответ

1

Здесь вы, в основном это комбинация split() и trim(). Вот пример:

$(function() { 
 
    $('button').on('click', function (e) { 
 
    var headers = {} 
 
    var values = $('#foo').val() 
 
    
 
    // split the headers by comma 
 
    var parts = values.split(',') 
 
    
 
    // iterate over each group 
 
    $.each(parts, function() { 
 
     // split by : and trim additional whitespace 
 
     var innerParts = this.split(':').map(function (item) { 
 
     return item.trim() 
 
     }) 
 
     
 
     // add the given results to the headers object 
 
     headers[innerParts[0]] = innerParts[1] 
 
    }) 
 
    
 
    console.log(headers) 
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<textarea id="foo" rows="5" cols="50"></textarea> 
 
<br> 
 
<button>click me</button>

+0

: да, я хочу что-то вроде этого, но используя это в своем запросе, если я использую: заголовки: JSON.stringify (заголовки) или заголовки: заголовки, заголовки, которые у меня есть в моей текстовой области, игнорируется и запрашивается только предварительный запрос (с помощью глагола OPTIONS http) –

+0

Не стягивайте заголовки, это должен быть объект – motanelu

+0

нет, все тот же. Но я сделаю некоторые дальнейшие исследования. функцию, которую вы предоставили, она работает, поэтому я буду отмечать ответ как принятый. Спасибо –

0

Если я понял, перед тем как сделать запрос $ ajax, вы можете получить заголовки и проанализировать его самостоятельно, чтобы создать строку, как вы хотите. Вы можете использовать регулярное выражение для разделения заголовков, когда у вас более одного.

+0

я смог также написать псевдокод, но у меня нет опыта работы с javascjript, что вот почему я спросил –

+0

Является ли ваш var заголовком массив-член? –

+0

Я не знаю, что это должно быть ... теперь я жестко закодировал значение, но у меня нет опыта работы с типами JavaScript, поэтому я не могу ответить на ваш вопрос. Мне нужна функция, которая преобразует строку в мои заголовки varaiable, поэтому я могу поместить ее в запрос, как вы можете видеть в исходном коде –

0

Это на самом деле не о заголовках, это просто манипуляция строки: вам нужно повернуть

"header1 : content1, header2 : content2" 

в

{"header1": "content1", "header2": "content2"} 

Разделив первую строку с , характером, а затем разделив все подстроки с : все должно быть в порядке.

+0

Мне также удалось написать псевдокод, но у меня нет опыта работы с javascjript , поэтому я спросил –

0

ли что-то нравится эта работа для вас? Это в основном ожидает от каждого заголовка, который необходимо ввести в новую строку:

function getHeaders() { 
 
    var headers = $('#headers').val(); 
 
    var lines = headers.split('\n'); 
 
    var headers = {}; 
 
    for (var i = 0; i < lines.length; i++) { 
 
    
 
    var line = lines[i]; 
 
    var parts = line.split(':'); 
 
    var key = parts[0]; 
 
    var value = parts[1]; 
 
    if (key && value) { 
 
     headers[key.trim()] = value.trim(); 
 
    } 
 
    } 
 
    return headers 
 
} 
 

 
$('button').click(function(){ 
 
    var headersObject = getHeaders(); 
 
    console.log(headersObject); 
 
})
#headers { 
 
    height: 200px; 
 
    width: 300px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea id="headers"> 
 
Content-Type : application/x-www-form-urlencoded 
 
Header2 : Value 
 
</textarea> 
 
<button>Get Headers Object</button>

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