jQuery отправить строку как параметры POST


98

Я хочу отправить строку как параметр сообщения ajax.

Следующий код:

$.ajax({
   type: "POST",
   url: "http://nakolesah.ru/",
   data: 'foo=bar&ca$libri=no$libri',
   success: function(msg){
     alert('wow'+msg);
   }
});

Не работает. Зачем?


2
Я вижу , что вы являетесь разработчиком PHP и я также вижу , что вы сделали это: ca$libri=no$libri. Просто проверяю, чтобы быть уверенным здесь ... вы уверены, что случайно не пытаетесь использовать конструкции PHP там, где должны быть JS? Если вы хотите включить значение $libriпеременной в этой строке, попробуйте следующее: 'foo=bar&ca' + $libri + '=no' + $libri.
treeface

nono :) я понимаю все моменты генерации js на php :) это имена переменных ajax в APS. Я создаю парсер, который разбирает какой-то сайт с помощью ajax. И теперь я понял, почему ошибка. Это междоменный запрос. Я должен сначала создать запрос к моему серверу :)
Миргород

Ответы:


182

Попробуйте вот так:

$.ajax({
    type: 'POST',
    // make sure you respect the same origin policy with this url:
    // http://en.wikipedia.org/wiki/Same_origin_policy
    url: 'http://nakolesah.ru/',
    data: { 
        'foo': 'bar', 
        'ca$libri': 'no$libri' // <-- the $ sign in the parameter name seems unusual, I would avoid it
    },
    success: function(msg){
        alert('wow' + msg);
    }
});

1
разве это не должны быть данные: {foo: 'bar'} без апострофа '?
Мариус Стэнеску

6
@MariusStanescu, оба эквивалентны синтаксису javascript.
Дарин Димитров

3
также почти уверен, что $ в ca $ libri в порядке
Майкл Крук

Не отвечает на вопрос о публикации в виде строки :(, см. Ответ ниже.
Эндрю

Это работает, но не работает: foo: 'bar'. Я потратил 2 дня без всякой причины, я не добавил знаки веревочки с обеих сторон !!!
Eugen Sunic

39
$.ajax({
    type: 'POST',    
    url:'http://nakolesah.ru/',
    data:'foo='+ bar+'&calibri='+ nolibri,
    success: function(msg){
        alert('wow' + msg);
    }
});

15
вот почему я пришел сюда, чтобы узнать, как отправить данные $ .post в виде строки. принятый ответ мне в этом не помогает. Спасибо.
chiliNUT

Согласен, у меня тоже была ситуация, когда для разрабатываемого мной фреймворка требовалась строка, хороший ответ. В моей ситуации я смог выполнить эту работу, поместив строку в переменную рядом с data :, формат моей строки был '? Var = value & var2 = value2'
Джозеф Астрахан

13

Я вижу, что они не поняли вашего вопроса. Ответ: добавьте "традиционный" параметр к вашему вызову ajax следующим образом:

$.ajax({
  traditional: true,
  type: "POST",
  url: url,
  data: custom ,
  success: ok,
 dataType: "json"
});

И он будет работать с параметрами PASSED AS A STRING.


Спасибо! Это спасает мне день!
Дата TT

11

Для аналогичного приложения мне пришлось обернуть свой dataобъект JSON.stringify()следующим образом:

data: JSON.stringify({ 
  'foo': 'bar', 
  'ca$libri': 'no$libri'
}),

API работал с клиентом REST, но не мог заставить его работать с jquery ajax в браузере. stringify был решением.


Почему нам пришлось это сделать?
Ренуар Рейс

Не уверен, но некоторые символы в ответе не должны считаться строками, если не принудительно.
Дилан Валад

4

Не уверен, актуально ли это до сих пор ... только для будущих читателей. Если вы действительно хотите передать свои параметры как часть URL-адреса, вам, вероятно, следует использовать jQuery.param () .


1

Это не прямой ответ на ваш вопрос .. Но следующий синтаксис - единственный, который у меня работал -

data: '{"winNumber": "' + win + '"}',

И имя параметра совпадает с аргументом серверного метода


1

Я тоже столкнулся с этой проблемой. Но у меня есть решение, и оно отлично сработало. Мне нужно было передать параметры, которые уже созданы функцией javascript. Итак, приведенный ниже код работает для меня. Я использовал ColdFusion для бэкэнда. Я просто напрямую использовал параметры как переменную.

                    $.ajax({
                    url: "https://myexampleurl.com/myactionfile.cfm",
                    type: "POST",
                    data : {paramert1: variable1,parameter2: variable2},
                    success: function(data){
                        console.log(data);                              
                    } )};

0

Я столкнулся с проблемой передачи строкового значения строковым параметрам в Ajax. После стольких поисков в Google я придумал собственное решение, как показано ниже.

var bar = 'xyz';
var calibri = 'no$libri';

$.ajax({
   type: "POST",
   dataType: "json",
   contentType: "application/json; charset=utf-8",
   url: "http://nakolesah.ru/",
   data: '{ foo: \'' + bar + '\', zoo: \'' + calibri + '\'}',
   success: function(msg){
       alert('wow'+msg);
   },
});

Здесь bar и calibri - это две строковые переменные, и вы можете передать любое строковое значение в соответствующие строковые параметры в веб-методе.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.