Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   передать параметры в функцию jQuery AJAX (https://javascript.ru/forum/misc/45269-peredat-parametry-v-funkciyu-jquery-ajax.html)

Lion_astana 21.02.2014 12:51

передать параметры в функцию jQuery AJAX
 
Привет всем. Задумался над таким вопросом:

Имеется скрипт JS (при подключенной jQuery) в котором много раз повторяется функция:

$.ajax({
			type: "POST",
			url: 'my.php',
			cache: false,
			data: {id: $("#optNewsId").val(),it: $("#optNewsIdEdit").val(),title: optNewsEditName},
			dataType: "html",
			beforeSend: showLoad($("#submit")),
			success: function(data){
				hideLoad();
				$(novalidOptList).html(data).show(400);
				if($(novalidOptList).has(".error").length < 1){ // Если в ответе не пришел p  с классом error
					setTimeout(function(){location.reload();},3000);	// Перезагружаем страницу				
				}else{
					clearNovalidList();
				};
			}
		});


Внутри этих функций меняются только:
1) url: 'my.php'
2) data: {id: $("#optNewsId").val(),it: $("#optNewsIdEdit").val(),title: optNewsEditName}
3) beforeSend: showLoad($("#submit"))

Чтоб не повторять это 15 раз на странице, хочу сделать свою пользовательскую функцию, а в ней будет этот $.AJAX. Как предавать в нее(в мою функцию) параметры для 1) и 3) я понимаю, а вот как в функцию передать, а затем поймать и вставить параметр "data", я не знаю.

Тут еще проблема в том, что в примере выше в data передается три параметра, а их может быть 10. Где-то элемент.val(), а где-то уже готовая переменная...

Надеюсь что смог изложить проблему, подскажите если кто знает, буду очень признателен.

Всем заранее спасибо!

danik.js 21.02.2014 13:00

Очередной пример, когда человек знает "язык программирования jQuery", но не понимает элементарных вещей в JS. Очень печалит конечно.
Ты передаешь аргумент в showLoad, ты передаешь аргументы в $.ajax наконец. И ты при этом утверждаешь что не умеешь передавать аргументы? :)

К слову твой код избыточен. Во-первых, POST запросы не кэшируются.
Во-вторых, для post-запросов есть алиас: $.post()

Также в beforeSend ты фигню написал. Это должна быть функция. Вместо функции ты тупо сразу же вызываешь свою функцию showLoad, а в beforeSend уходит undefined, который тупо игнорируется.

Lion_astana 21.02.2014 13:43

Цитата:

Сообщение от danik.js
POST запросы не кэшируются

согласен, натупил.

Цитата:

Сообщение от danik.js
Также в beforeSend ты фигню написал

Т.е. нужно писать:
beforeSend: function(){
showLoad($("#submitOptFormNewsEdit"))
}

?

Я не не знаю как можно передать параметры в data, я спросил как это сделать правильно.
Нужен просто совет знающего, такого как Вы danik.js, уж не раз меня тут выручали :-)

Если я сделаю так:

var dataVar = 'id: $("#optNewsId").val(),it: $("#optNewsIdEdit").val(),title: optNewsEditName';

// .....
 data: {dataVar},
//.....


Так будет правильно?

Lion_astana 21.02.2014 15:07

Понял, снова ступил. В data должна передаваться строка/объект. То что я написал - неправильно.
var dataVar = {id: $("#optNewsId").val(),it: $("#optNewsIdEdit").val(),title: optNewsEditName};

// .....
 data: dataVar,
//.....

danik.js 21.02.2014 15:10

var data = {id: $('#optNewsId').val(), title: optNewsEditName};
post('my.php', data);


function post(url, data) {
    $.post({
        url: url,
        data: data,
        ...
    });
});

Aetae 21.02.2014 16:28

Цитата:

Сообщение от danik.js (Сообщение 298773)
var data = {id: $('#optNewsId').val(), title: optNewsEditName};
post('my.php', data);


function post(url, data) {
    $.post({
        url: url,
        data: data,
        ...
    });
});

и даже так
post('my.php', {id: $('#optNewsId').val(), title: optNewsEditName});


function post(url, data) {
    $.post({
        url: url,
        data: data,
        ...
    });
});

точно также как в $.ajax() передаётся объект. Объекты ничем не хуже строк.)

Lion_astana 21.02.2014 17:24

danik.js,
Спасибо!

Lion_astana 21.02.2014 17:25

Aetae,
Спасибо.


Часовой пояс GMT +3, время: 12:33.