Я следовал учебнику, как указано в ссылке this. В приведенном ниже коде по какой-то причине данные не добавляются к URL в качестве параметров, но если я устанавливаю их непосредственно к URL, используя /?field1 = "hello"
это работает.
$.ajax({
url: 'superman',
type: 'POST',
data: { field1: "hello", field2 : "hello2"} ,
contentType: 'application/json; charset=utf-8',
success: function (response) {
alert(response.status);
},
error: function () {
alert("error");
}
});
Я бы порекомендовал вам использовать синтаксис jQuery $ .post
или $.get
для простых случаев:
$.post('superman', { field1: "hello", field2 : "hello2"},
function(returnedData){
console.log(returnedData);
});
Если вам нужно поймать случаи сбоя, просто сделайте это:
$.post('superman', { field1: "hello", field2 : "hello2"},
function(returnedData){
console.log(returnedData);
}).fail(function(){
console.log("error");
});
Кроме того, если вы всегда отправляете строку JSON, вы можете использовать $ .getJSON или $ .post с еще одним параметром в самом конце.
$.post('superman', { field1: "hello", field2 : "hello2"},
function(returnedData){
console.log(returnedData);
}, 'json');
Попробуйте использовать метод GET
var request = $.ajax({
url: 'url',
type: 'GET',
data: { field1: "hello", field2 : "hello2"} ,
contentType: 'application/json; charset=utf-8'
});
request.done(function(data) {
// your success code here
});
request.fail(function(jqXHR, textStatus) {
// your failure code here
});
Вы не можете видеть параметры в URL с методом POST.
Редактировать:
Уведомление об углублении: JqXHR.success (), jqXHR.error () и обратные вызовы jqXHR.complete () удаляются с jQuery 3.0. Вы можете использовать jqXHR.done (), jqXHR.fail () и jqXHR.always () вместо.
Jquery.ajax не кодирует данные POST для вас автоматически так, как это делается для данных GET. Jquery ожидает, что ваши данные будут предварительно сформированы для добавления в тело запроса, которое будет отправлено непосредственно через провод.
Решение состоит в том, чтобы использовать функцию jQuery.param для создания строки запроса, которую ожидают большинство сценариев, обрабатывающих запросы POST.
$.ajax({
url: 'superman',
type: 'POST',
data: jQuery.param({ field1: "hello", field2 : "hello2"}) ,
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
success: function (response) {
alert(response.status);
},
error: function () {
alert("error");
}
});
В этом случае метод param
форматирует данные для:
field1=hello&field2=hello2
Документация Jquery.ajax говорит о том, что существует флаг под названием processData
, который контролирует, выполняется ли эта кодировка автоматически или нет. В документации говорится, что по умолчанию используется «true», но это не то поведение, которое я наблюдаю при использовании «POST».
function FillData() {
var param = $("#<%= TextBox1.ClientID %>").val();
$("#tbDetails").append("<img src='Images/loading.gif'/>");
$.ajax({
type: "POST",/*method type*/
contentType: "application/json; charset=utf-8",
url: "Default.aspx/BindDatatable",/*Target function that will be return result*/
data: '{"data":"' + param + '"}',/*parameter pass data is parameter name param is value */
dataType: "json",
success: function(data) {
alert("Success");
}
},
error: function(result) {
alert("Error");
}
});
}
В POST-запросе параметры отправляются в теле запроса, поэтому вы не видите их в URL-адресе
Если хочешь их увидеть, меняйся
type: 'POST',
к
type: 'GET',
Обратите внимание, что в браузерах есть инструменты разработки, которые позволяют вам видеть полные запросы, которые выдает ваш код. В Chrome это на панели «Сеть».
$.ajax(
{
type: 'post',
url: 'superman',
data: {
"field1": "hello",
"field2": "hello1"
},
success: function (response) {
alert("Success !!");
},
error: function () {
alert("Error !!");
}
}
);
type: 'POST'
, добавит параметры к телу запроса , который не виден в URL , а type: 'GET'
, добавляет параметры по URL, который виден .
Большинство популярных веб-браузеров содержат сетевые панели, которые отображают полный запрос .
На сетевой панели выберите XHR , чтобы увидеть запросы .
Это также можно сделать с помощью этого.
$.post('superman',
{
'field1': 'hello',
'field2': 'hello1'
},
function (response) {
alert("Success !");
}
);
Вы можете сделать это, используя $ .ajax или $ .post
Использование $ .ajax:
$.ajax({
type: 'post',
url: 'superman',
data: {
'field1': 'hello',
'field2': 'hello1'
},
success: function (response) {
alert(response.status);
},
error: function () {
alert("error");
}
});
Использование $ .post:
$.post('superman',
{
'field1': 'hello',
'field2': 'hello1'
},
function (response, status) {
alert(response.status);
}
);
Ваш код был правильным, за исключением того, что вы не передаете ключи JSON в качестве строк.
Вокруг него должны быть двойные или одинарные кавычки
{"field1": "hello", "field2": "hello2"}
$.ajax(
{
type: 'post',
url: 'superman',
data: {
"field1": "hello", // Quotes were missing
"field2": "hello1" // Here also
},
success: function (response) {
alert(response);
},
error: function () {
alert("error");
}
}
);