使用 jquerymobile 在 workligh 应用程序中的 url 中发送数组失败

Posted

技术标签:

【中文标题】使用 jquerymobile 在 workligh 应用程序中的 url 中发送数组失败【英文标题】:failed to send array in url in workligh application using jquerymobile 【发布时间】:2014-01-28 11:04:06 【问题描述】:

我正在使用 jquerymobile 在 IBM Worklight 中构建一个混合应用程序。 我想将服务器 php 返回的 json 数组发送到 url 中的另一个页面。代码如下所示:searchPools.js 文件 (调用另一个页面的文件)

$(document).undelegate('#srhPool', 'click').delegate('#srhPool', 'click', function() 
                    var source = $("#csource1").val();
                    var destination = $("#cdest1").val();
                    var poolDate = $("#pooldate1").val();

                    if(source == null || source == "")
                        $("#csource1").parent().css('border','2px solid red');
                    if(destination == null || destination == "")
                        $("#cdest1").parent().css('border','2px solid red');
                    if(poolDate == null || poolDate == "")
                        $("#pooldate1").parent().css('border','2px solid red');


                    if(source == null || source == "" || destination == null || destination == "" || poolDate == null || poolDate == "" || validateRadio == false)
                        alert("Oops! Your Pooling Info is Incomplete.");
                    
                    else
                        savePool(userId, source, destination, poolDate, preferVehicle);
                    
                );

            //save pool info

               function savePool(userId, source, destination, poolDate, preferVehicle)
                   $.mobile.utils.showWaitBox("a", "Wait! Searching Poolers...");
                    var invocationData9 = 
                            adapter : 'registerUser',
                            procedure : 'searchPoolData',
                            parameters : [userId, source, destination, poolDate, preferVehicle]
                    ;

                    WL.Client.invokeProcedure(invocationData9, 
                        onSuccess : poolSuccess,
                        onFailure : poolFailure,
                    );
                

                function poolSuccess(result)
                    $.mobile.utils.hideWaitBox();
                    var invocationResult = result.invocationResult;
                    var array1 = invocationResult.pools;
                    var dataurl2 = '?array='+array1;

                    $.mobile.changePage('../../pages/passenger/poolResults.html'+dataurl2, transition: "slide");

                

                function poolFailure(result)
                    $.mobile.utils.hideWaitBox();
                    WL.Logger.error('Search Unsuccessful');
                

poolResults.js(访问数组的文件)

$(document).on( 'pagebeforeshow', '#poolResults', function(event)

    var params = new Array();

     function getParams()
             var idx = document.URL.indexOf('?');

             if (idx != -1) 
             var pairs = document.URL.substring(idx+1, document.URL.length).split('&');
             for (var i=0; i<pairs.length; i++)
             nameVal = pairs[i].split('=');
             params[nameVal[0]] = nameVal[1];
             
             
             return params;
         
         params = getParams();
         getArray = unescape(params["array"]);
         alert(getArray);
);

它不起作用。 我想要做的是单击页面中的一个按钮,然后通过 http 适配器检索一些结果。在 searchPools.js 文件中,通过 poolSuccess 函数成功获取了值。现在,这些值将显示在使用 $.mobile.changePage 显示的另一个页面上。 我想知道我使用的方式是正确的,或者可以使用其他方式来实现这一点。

【问题讨论】:

这里有什么问题? worklight adatper 还是你的 js 代码? worklight 适配器工作正常。我提到的是url中发送的数组在其他js文件中没有被访问。另外,告诉我我们可以像我一样在url中发送json数组吗? 您将其作为 json 获取,那么为什么您不能在 changepage successhandler 中调用一个函数并将 json 作为参数发送并在那里使用 json 进行工作? 我不明白你想说什么,请解释一下。 【参考方案1】:

这样发送数组

$.mobile.changePage('page2.html',  dataUrl : "page2.html?parameter=123", data :  'paremeter' : '123' , reloadPage : true, changeHash : true );

然后像

一样检索它们
$("#index").live('pagebeforeshow', function (event, data) 
    var parameters = $(this).data("url").split("?")[1];;
    parameter = parameters.replace("parameter=","");  
    alert(parameter);    
);

For More Info See The Link

为了你的理解传递它为

$.mobile.changePage("newPage.html", data: param1 : YOUR JSON  );

并将其检索为

    <script type="text/javascript">
        $("#newPageId").on("pageshow", onPageShow);

        function onPageShow(e,data)
        
            var url = $.url(document.location);

            var param1 = url.param("param1");
        
    </script>

【讨论】:

我明白这一点,但正如我所提到的,我想发送我得到的整个 json 结果。据我了解,您想说我只将一个参数(例如,id)发送到其他页面,然后从那里调用 http 适配器并检索结果。 是的,而不是data: 'paremeter' : '123' ,您可以发送您的 json 数据,请参阅链接以供参考。 好的!但是我的应用程序结构是 - 我在一个页面上有一个按钮,当我单击它时,就会调用 http 适配器,如您在 searchPools.js 代码中所见。现在在 poolSuccess 函数上,我得到了 json 数组结果。现在我想在使用 $.mobile.changePage 更改的其他页面上显示这些数组结果。那么,我如何做到这一点。我尝试的是将url中的数组发送到下一页,它可以工作吗? @himanshu.miet.cse 你错误地尝试了 chagepage jquery 语法 按照我上面展示的方式试试。 我使用相同的语法来发送值,并且它有效。但我不知道可以使用这种技术发送数组。如果我使用 $.mobile.changePage("newPage.html", data: param1 : YOUR JSON );正如你提到的,我可以使用这种技术发送整个数组吗?

以上是关于使用 jquerymobile 在 workligh 应用程序中的 url 中发送数组失败的主要内容,如果未能解决你的问题,请参考以下文章

利用jquerymobile怎么写js代码?还跟jquery写事件方法一样吗?求大神帮帮忙

jQueryMobile:固定页脚故障

如何在没有 CSS 且仅使用 JavaScript 或 jQuery/jQueryMobile 的情况下更改设备方向?

Cordova/Knockout/jQueryMobile 缓存内存性能

在使用 JQueryMobile 和 IBM Worklight 6.0 时找不到 $ -

如何在 jQueryMobile 1.4.2 中使用格式化的内容设置单选按钮列表的样式