Вы ничего не делаете неправильно! Вы изменили каталог, но только в подоболочке, которая выполняет сценарий.
можно выполнить сценарий в текущем процессе с "точечной" командой:
. proj
, Но я предпочел бы, чтобы предложение Greg использовало псевдоним в этом простом случае.
Плагин jQuery, казалось, отлично работал, пока я не попробовал его в IE8. Мне пришлось внести эту небольшую модификацию, чтобы заставить его работать в IE:
(function($) {
$.extend({
getGo: function(url, params) {
document.location = url + '?' + $.param(params);
},
postGo: function(url, params) {
var $form = $("<form>")
.attr("method", "post")
.attr("action", url);
$.each(params, function(name, value) {
$("<input type='hidden'>")
.attr("name", name)
.attr("value", value)
.appendTo($form);
});
$form.appendTo("body");
$form.submit();
}
});
})(jQuery);
Принятый ответ, похоже, не покрывает ваши требования POST, поскольку установка document.location всегда приводит к в запросе GET. Вот возможное решение, хотя я не уверен, что jQuery позволяет загружать все содержимое страницы следующим образом:
$.post(url, params, function(data) {
$(document).html(data);
}, "html");
Вот что я в итоге сделал, воспользовавшись советом от redsquare:
(function($) {
$.extend({
doGet: function(url, params) {
document.location = url + '?' + $.param(params);
},
doPost: function(url, params) {
var $form = $("<form method='POST'>").attr("action", url);
$.each(params, function(name, value) {
$("<input type='hidden'>")
.attr("name", name)
.attr("value", value)
.appendTo($form);
});
$form.appendTo("body");
$form.submit();
}
});
})(jQuery);
Использование:
$.doPost("/mail/send.php", {
subject: "test email",
body: "This is a test email sent with $.doPost"
});
Любые отзывы приветствуются.
Обновление: см. Ответ Dustin для версия, которая работает в IE8
Из вопроса неясно, есть ли у вас случайный набор значений, которые вы хотите передать в строку запроса, или это значения формы.
Для значений формы просто используйте .serialize функция для создания строки запроса.
например
var qString = $('#formid').serialize();
document.location = 'someUrl' + '?' + serializedForm
Если у вас есть случайный набор значений, вы можете создать объект и использовать служебный метод .param .
например,
var params = { width:1680, height:1050 };
var str = jQuery.param( params );
console.log( str )
// prints width=1680&height=1050
// document.location = 'someUrl' + '?' + str
Молодец, итсадок! Если вы хотите, чтобы невидимая форма поместила ее в скрытый DIV:
(function($) {
$.extend({
doGet: function(url, params) {
document.location = url + '?' + $.param(params);
},
doPost: function(url, params) {
var $div = $("<div>").css("display", "none");
var $form = $("<form method='POST'>").attr("action", url);
$.each(params, function(name, value) {
$("<input type='hidden'>")
.attr("name", name)
.attr("value", value)
.appendTo($form);
});
$form.appendTo($div);
$div.appendTo("body");
$form.submit();
}
});
})(jQuery);