# controller return javascript(Jquery) to eval
def echo:
import json
return "$('#target').html(%s)" %(json.dumps(DIV("Hello",
STRONG("world"), "<tag_of_devil>Escape this?</tag_of_devil>").xml()))
#view
<div id="target"></div>
<button id="your_button">get from echo</button>
<script>
$("#your_button").on("click", function(){
url_ajax = "{{=URL("your_controler", "echo")}}"
ajax(url_ajax, [], ":eval"))
})
</script>
Em ter, 21 de mai de 2019 às 19:43, Eliezer (Vlad) Tseytkin <
[email protected]> escreveu:
> I am very familiar with controllers/views/helpers the way you just
> specified, but it doesn't help me because here is my context:
> I am using ajax function from JavaScript, as a response to a certain event
> on the page. This ajax is called with :eval option which allows me to
> construct actual JavaScript string to be executed (the one that in my
> example represented by result+=...); the reason I can't use a regular JS
> ajax call which replaces html element is because I specifically need to
> update multiple targets, so :eval is my only option). I can't use regular
> {{...}} embeds either, because I can't reload the page - need to update
> multiple html elements on the fly, in ajax mode.
> That's why my only option seems to be constructing JavaScript which
> executes the necessary updates on the page as a sequel to JavaScript
> ajax(:eval) call. This is exactly how I ended up constructing JavaScript in
> my controller function and the need to mix in some web2py objects in it.
>
> On Tue, May 21, 2019, 6:24 PM villas <[email protected]> wrote:
>
>> Not sure what you are trying to do, work in the controller or view, or
>> why you are trying to append with JS.
>>
>> Maybe you could learn to use the web2py helpers...
>> e.g. controller
>> def example():
>> cart = db(db.cart).select().as_list()
>> mydiv = DIV(cart, _id='Debug_Discount' )
>> return dict(mydiv=mydiv)
>>
>> view example.html
>> {{=mydiv}}
>>
>> OR
>> e.g. controller
>> def example():
>> cart = db(db.cart).select()
>> mydiv = DIV(_id='Debug_Discount' )
>> return dict(mydiv=mydiv, rows=rows)
>>
>> view example.html
>> {{=mydiv}}
>> <hr />
>> <script>
>> {{ =ASSIGNJS(cart) }}
>> $('#Debug_Discount').html(cart);
>> </script>
>>
>> Not sure whether any of the above will work or help, but just experiment
>> until you learn how best to mix it all together.
>>
>>
>>
>> On Tuesday, 21 May 2019 17:40:59 UTC+1, Vlad wrote:
>>>
>>> ALMOST :)
>>>
>>> result += ASSIGNJS(cart=cart)
>>> result += "$('#Debug_Discount').append('<div>'+cart+'</div>');"
>>>
>>> this comes out as [object Object]
>>>
>>> But generated Javascript (as far as the object's content is concerned)
>>> seems right - I think I am missing the final touch, some javascript trick
>>> that would print it fully.
>>>
>>> Here is actual Javascript generated:
>>>
>>> $('#Debug_Discount').append('<hr/>');
>>> var cart = [{"id": 125, "cart": 40, "product": 161, "quantity": 1,
>>> "price": 3000, "imported": null, "is_active": true, "created_on":
>>> "2019-05-17 15:47:52", "created_by": 1, "modified_on": "2019-05-17
>>> 15:47:52", "modified_by": 1}];
>>> $('#Debug_Discount').append('<div>'+cart+'</div>');.
>>>
>>> Good ideas on final touch?
>>>
>>> On Tuesday, May 21, 2019 at 11:34:54 AM UTC-4, villas wrote:
>>>>
>>>> Maybe this: ASSIGNJS
>>>>
>>>> http://www.web2py.com/books/default/chapter/29/05/the-views#ASSIGNJS
>>>>
>>>>
>>>>
>>>> On Tuesday, 21 May 2019 15:43:25 UTC+1, Vlad wrote:
>>>>>
>>>>> I am calling ajax function with :eval and setting up some javascript
>>>>> [from the controller] to be executed [as per :eval option js is executed
>>>>> in
>>>>> the end], something like this:
>>>>>
>>>>> result = "$('#DebugID').append('<p>"
>>>>> result += "CONTENT"
>>>>> result += "</p>');"
>>>>> return result
>>>>>
>>>>> Now, this works, and it displays <p>CONTENT</p> at the right place.
>>>>>
>>>>> But here is a catch: instead of "CONTENT" I want it to display an
>>>>> object, for example Rows object which is returned by db.select.
>>>>> In other words, whatever comes out when {{=rows}} is specified in html
>>>>> view, I want to send via javascript.
>>>>>
>>>>> Obviously, the following 2 options are grossly incorrect and don't
>>>>> work, for obvious reasons:
>>>>> result += XML(rows)
>>>>> result += "={{rows}}"
>>>>>
>>>>> So, how do I make the stuff display properly as passed over vial
>>>>> javascript?
>>>>>
>>>>>
>>>> --
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "web2py-users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/web2py/oGAP28q6c_Q/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/web2py/c5abcf26-bfd9-4461-baea-2f62ea695d61%40googlegroups.com
>> <https://groups.google.com/d/msgid/web2py/c5abcf26-bfd9-4461-baea-2f62ea695d61%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/web2py/CABZ%2BKCD3OZtPgka-u-koFFN3QqxyYK_n94G34rhmuNTdKxebuQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/web2py/CABZ%2BKCD3OZtPgka-u-koFFN3QqxyYK_n94G34rhmuNTdKxebuQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/CAFoqysiCxzOFxuwe1DWU%2BUWbAGu9dktFmB5g-c%3D-piA4qUCkvA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.