Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 28.05.2005
Сообщений: 347
1

src.Request_Content(0) не работает через AJAX и еще пару вопросов.

11.01.2017, 09:51. Показов 3953. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Давно я не брал в руки шашку).

Жили, не тужили, ломились напрямую к серверу агентом из WQS с перезагрузкой web страницы и все замечательно работало. Моргало, правда). Но задумалось тут полностью перейти на jQuery ajax. И началось...
1. Не работает src.Request_Content(0) при запуске из конструкции JS $.post(UpdateCart?OpenAgent. Request_Content тупо пустой. Я конечно, запихнул args через argsArray = explode(src.Query_String(0), "&"), и сделал так $.post(UpdateCart?OpenAgent+args, но там есть ограничение по размеру урла. Его можно подкрутить через настройку в сервере по http://www-01.ibm.com/support/docview.wss?uid=swg21209339, но как вернуть Request_Content?

2. Был старый агент на LS пускаемый по тупо-сабмиту на форме и в котором работала конструкция:
Print(script common.js)
Print(script _doSetCookie(shopcart) & Cstr(userdoc.UniversalID)
(я не смог загрузить ее полным текстом в пост из-за какого-то дебильного алерта на форуме с ахтунгом "This website is using a security service to protect ytself from online attacks.")
Куки отказались писаться при запуске через AJAX вот так $.post(AddToCart?OpenAgent, Пришлось переписывать агент LS на $.post(AddToCartAJAX?OpenAgent+args + &SessionID= + sessionID+&rnds=+rndsess, и дальнейшее в котром ищу прописанное в агенте по параметрам rndsess. И дальше

Код
$.getJSON(doValidateUNIDjson?openpage+&rnds=+rndsess;
function(resp){
var respunid = resp.unid;
if ( respunid != null) {_doSetCookie(shopcart, respunid) };
Может оно и к лучшему, но ЧЯДНТ?

3. При подсчете в JS вот такой конструкции:

Код
var boxes = $("form[name=Cart]  input:checkbox:enabled");
isboxes.each(function(){
chboxes = chboxes+1;
args = args + "&" + $(thys).attr(name)+=1;
});
chboxes возвращает максимум 50. Но у меня бывает и больше чекбоксов. Это ограничение где порылось? Заткнул так

Код
 if ( chboxes >=50 ) {
$.msgbox(Более 50 товаров удалить сразу нельзя.,4);
boxes.removeAttr(checked);
ку1: Сервер 8.5.2. Клиент 7.0.4. jquery-1.12.4.min.js Если что. Про xpages даже слышать не хочу.
ку2: Попутно был найден и заюзан неплохой WebSession class originally from http://tanny.ica.com/ICA/TKO/t... gent-class, но в нем нет метода прописывания кук в агенте LS. Может кто доделывал?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2017, 09:51
Ответы с готовыми решениями:

процессы и ещё пару вопросов
привет всем,в общем помогите пожалуйста ,как можно получить список всех запущенных процессов? и...

Ввод вывод из/в файлы(и еще пару вопросов)
Знаю парочку способов ввести/вывести данные из файла не знаю какой из них какой! :) В общем я...

пару вопросов по ASP.NET AJAX
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> Вот эту штуку куда...

При включении ПК стартуют кулера на 2 секунды, потом выкл.,и через ещё пару секунд включаются уже на постоянку
Ситуация такая: при включении ПК стартуют кулера на пару секунд, потом выключаются и через ещё пару...

9
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
11.01.2017, 10:26 2
Цитата Сообщение от NetWood
Может кто доделывал?
Нашел вот что, но не проверял. Думаю, Вы сможете это подкрутить к Вашему классу.

.SpoilerTarget">Спойлер: Код


LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Function getCookieVal( cookie As String, thysname As String) As String
Dim prefix As String
prefix = thysname + "="
Dim begin As Integer
Dim ending As Integer
begin = Instr(cookie, "; " + prefix)
If begin = 0 Then
begin = Instr(cookie, prefix)
If begin = 0 Then
getCookieVal = ""
Exit Function
End If
Else
begin = begin +2
End If
ending = Instr(begin, cookie, ";") - 1
If ending = -1 Then
ending = Len(cookie)
End If
getCookieVal = unescape(Mid$(cookie, begin+Len(prefix), ending - begin -Len(prefix)+1))
End Function
 
Sub setCookie(doc As NotesDocument, compName As String, compValue As String, adjYear As Integer, adjHour As Integer)
uses a print statement to set the cookie
uses adjYear and adjHour to set the expiry time of the cookie.
If the cookie is needed for the one particular session set adjHour to 1, then the cookie is active for an hour
If you want to expire a cookie, use a negative number for either adjYear or adjHour.
Dim thystyme As NotesDateTime
Dim gmttime As NotesDateTime
Dim gmtvar As Variant
Dim cooktime As String
Set thystyme = New NotesDateTime("")
Call thystyme.SetNow
If adjHour <> 0 Then
Call thystyme.AdjustHour(adjHour)
End If
If adjYear <> 0 Then
Call thystyme.AdjustYear(adjYear)
End If
Set gmttime = New NotesDateTime(Left$(thystyme.GMTTime, Len(thystyme.GMTTime)-4))
gmtvar = gmttime.LSLocalTime
cooktime = Format(gmtvar, "dddd")+ ", " + Format(gmtvar, "dd")+ "-" + Format(gmtvar, "mmm") + "-" + Format(gmtvar, "yyyy") +_
" " + Format(gmtvar, "hh:mm:ss") + " GMT"
compName = escape(compName)
compValue = escape(compValue)
Dim dbpath As String
dbpath = Strleft(Lcase(doc.Path_Info_Decoded(0)), ".nsf") + ".nsf"+ "/"
Print "Set-Cookie: " + compName + "=" + compValue + "; expires=" + cooktime + "; path=" + dbpath + ";"
End Sub
 
Function escape(strIn As String) As String
Dim strAllowed As String
Dim i As Integer
Dim strChar As String
Dim strReturn As String
 
strAllowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" & "@/.*-_"
i = 1
strReturn = ""
While Not (i > Len(strIn))
strChar = Mid$(strIn, i, 1)
If Instr(1, strAllowed, strChar) > 0 Then
strReturn = strReturn & strChar
Else
strReturn = strReturn & "%" & Hex$(Asc(strChar))
End If
i = i + 1
Wend
escape = strReturn
End Function
 
Function unescape(strIn As String) As String
Dim i As Integer
Dim strChar As String
Dim strReturn As String
 
i = 1
strReturn = ""
While Not (i > Len(strIn))
strChar = Mid$(strIn, i, 1)
If Not strChar = "%" Then
strReturn = strReturn & strChar
Else
i = i + 1
strChar = "&H" & Mid$(strIn, i, 2)
strReturn = strReturn & Chr$(Val(strChar))
i = i + 1
End If
i = i + 1
Wend
unescape = strReturn
End Function
Взято тут: http://noteschat.blogspot.ru/2008/02/setcookie-and-getcookie-using.html
Автор переносил свой блог, исходник его класса вот тут: http://www.codestore.net/store... G-20080211
0
0 / 0 / 0
Регистрация: 20.07.2014
Сообщений: 93
11.01.2017, 12:09 3
1) вторым параметром данные точно передаются? реквест контент меньше 64кб? http://www-01.ibm.com/support/docview.wss?uid=swg21240370
3) какой-то странный селектор для чекбокса. А такой пробовали - input:checked?

p.s. сложно судить что у вас не так, т.к. код везде не полный Может в файлик запихнете и приаттачите?
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
11.01.2017, 14:25 4
Цитата Сообщение от NetWood
но как вернуть Request_Content?
куда вернуть?
получить в агенте?
0
0 / 0 / 0
Регистрация: 28.05.2005
Сообщений: 347
12.01.2017, 00:20 5
Цитата Сообщение от lmike
куда вернуть?
получить в агенте?
Да, получить Request_Content в агенте. src.Request_Content(0)из аякса пустой.


Цитата Сообщение от romych2004
1) вторым параметром данные точно передаются? реквест контент меньше 64кб? http://www-01.ibm.com/support/docview.wss?uid=swg21240370
Попробую REQUEST_CONTENT_000...


--- Добавлено 13 янв 2017. Первое сообщение размещено 12 янв 2017 ---

Ответ на вопрос п.3 весьма неожиданный. Server -> Internet Protocols panel -> Domino Web Engine -> Число строк на странице по умолчанию: 50. Поставил больше и $("form[name=Cart] input:checkbox:enabled"). length стал показывать нормально. LOL. Какое отношение имеет JS исполняемый на клиенте к количеству строк сервера. Еще nginx фронтом стоит. Думал, он дуркует.
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
12.01.2017, 07:44 6
Цитата Сообщение от NetWood
Число строк на странице по умолчанию: 50. Поставил больше и $("form[name=Cart] input:checkbox:enabled"). length стал показывать нормально.
ну если посылается запрос в БД (аякс) - будет влиять


--- Добавлено 13 янв 2017. Первое сообщение размещено 13 янв 2017 ---




Цитата Сообщение от romych2004
1) вторым параметром данные точно передаются? реквест контент меньше 64кб? http://www-01.ibm.com/support/docview.wss?uid=swg21240370
неожиданный ход индусской мысли ;)
0
0 / 0 / 0
Регистрация: 28.05.2005
Сообщений: 347
13.01.2017, 01:04 7
Итак, проверил src.REQUEST_CONTENT_000(0) = пусто

Зову аяксом так:

Код
$.post(UpdateCartAJAX?OpenAgent+ args,
{
beforeSend: function(){$("#cart_count").fadeOut()} ,
complete: function(){$("#cart_count").fadeIn()}
},
function(){
$("#cart_count").load("doViewCartCount?ReadForm");
}, "html");
В агенте LS src.Request_Content(0)=beforeSend=undefined&complete=undefined.
Если закоментить beforeSend и complete, то src.Request_Content(0) пустой.


--- Добавлено 14 янв 2017. Первое сообщение размещено 13 янв 2017 ---

В общем, пришел к выводу, что халява с Request_Content передаваемым по простому сабмиту с формы, на AJAX не проходит.
Данные для Request_Content надо заранее парсить со страницы и явно указывать параметром data в $.ajax.

Работает так:

Код
testpost :="<a href=javascript:_doTestAJAXPost(); class=bodytext>_doTestAJAXPost</a>";
@(Implode(testpost))

Код (Javascript):
function _doTestAJAXPost(){
var url = 1TestAJAX?OpenAgent;
var itext = $("input:text"); //все текстовые инпуты
var boxes = $("input:checkbox:enabled"); //все чекбоксы
var isboxes = $("input:checkbox:checked"); //все отмеченные чекбоксы
var args = ;
//check ALL input:text value
itext.each(function(){
args = args + "&" + $(thys).attr("name") + "=" + $(thys).val();
});
//check input:checkbox checked
isboxes.each(function(){
args = args + "&" + $(thys).attr(name);
});
$.alert(args); //свой алерт с autocountdown
//var datastr = encodeURI(args);
var datastr = args;
//https://jquery-docs.ru/jQuery.ajax/
$.ajax({
url: url,
type: post,
data: datastr, //Данные отправляемые на сервер = src.Request_Content(0)
//dataType : "html", // тип загружаемых данных
success: function(){$.msgbox(complete _doTestPost)} // свой обработчик на функцию success
});
}


LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Initialize
Тестовый Агент проверки AJAX 1TestAJAX
On Error Goto errHnd
=== WebSession class originally from http://tanny.ica.com/ICA/TKO/tkoblog.nsf/dx/websession-agent-class
Dim web As New WebSession()
Dim arg As Variant, arg2 As String, arguments List As String
arg =  web.session.DocumentContext.Request_Content(0)
Msgbox "ws.Request_Content(0)="+arg
arg2 =  web.session.DocumentContext.Query_String(0)
Msgbox "ws.Query_String(0)="+arg2
errHnd:
If error, let user know - redirect web browser to Order Error page
Print "Error #:" + Str(Err)+ " line: "+ Cstr(Erl)
End Sub
В консоли имеем что-то такое:
14.01.2017 01:39:31 HTTP Server: Agent message: ws.Request_Content(0)=&8868C36
A7E41D17FC32578550037BA66=1&E0979BA5BAEF22C4C32578550037BAB4=2&4A7AF14E7E354D73C
32578550037BE48=3&2842350FDFDEC9DEC32578550037BA8C=&63B44202751E197CC32578550037
BD59=&287771D053AB43FBC32578550037BADB=&761092244449F8C1C32578550037BF38
14.01.2017 01:39:31 HTTP Server: Agent message: ws.Query_String(0)=OpenAgent
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 882
13.01.2017, 11:17 8
используйте ф-цию серелизации .serialize()
всегда работало без проблем:

Код (Javascript):

var formdata=$(document.forms[0]).serialize();
$.post(url,formdata, function(data) {

})

Если для некоторых полей (уменьшить оверхед) - то типа такого :


Код (Javascript):

function serializeFields(fieldList){
// сериализация только нужных полей текущей формы
// поля перечислены через запятую. Регистр - важен
return $(form:first).find(input[name="+fieldList.split(",").join("],input[name=")+"]).serialize()
}

var formdata=serializeFields(EditDoc,Action,ID,UNID,Form,ServiceTypeKey,RealReqKey,R eqKey,StandartKey,key,eid,Signed,Status);
$.ajax({
type: "POST",
url: agent,
data:formdata
})
.done(function(data) {
$("#param-content").html(data);
});
}


Ловля параметров в агенте (свыше 64 к есть другой вариант)

LotusScript
1
2
3
4
5
6
7
8
9
10
Передача параметров
v=Evaluate({@Explode(@UrlDecode("Domino";Request_Content);"&")},contextdoc)
Forall vls In v
tmp=vls
If Not Iselement(ValueList(Strleft(tmp,"="))) Then
ValueList(Strleft(tmp,"="))=Strright(tmp,"=")
Else
ValueList(Strleft(tmp,"="))=ValueList(Strleft(tmp,"="))+"||"+Strright(tmp,"=")
End If
End Forall
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
13.01.2017, 16:21 9
Цитата Сообщение от rinsk
Ловля параметров в агенте (свыше 64 к есть другой вариант)
собаки могут свыше 64к?
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 882
13.01.2017, 17:48 10
Цитата Сообщение от lmike
собаки могут свыше 64к?
ну я и говорю - свыше 64к и для аплоада есть другой вариант. даже несколько всяких.
например - https://github.com/extnd/SDK/b... uest_1.lss
Только там несколько ошибок.
0
13.01.2017, 17:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2017, 17:48
Помогаю со студенческими работами здесь

Как отправить форму, если в ней имеется еще одна форма, через ajax?
Здравствуйте, знатоки. Имеется главная простая форма для отправки с вложенной формой для загрузки...

Пару вопросов))
Люди скажите пжл что такое Билдер)) смотрел на сайте http://delfcode.ru/blog)) описанно как его...

Пару вопросов
Такой вопрос. Юзаю на сайте движок DLE, на морду поставил ключи, эти ключи ставить на все страницы...

пару вопросов
1. Как убрать в cxLookupComboBox надпись number....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru