浏览器中的Ajax Broken适用于Android

时间:2011-02-23 20:47:40

标签: ajax

我可以在Android应用中运行此代码(使用PhoneGap和jQuery Mobile),但不能在桌面浏览器上运行。 它在firebug中为此行=

提供了语法错误
var TicketList = eval("(" + ajax.responseText + ")"); 

这是代码

// JScript source code

// ran on body load
function doJsStuff()
{
    var ajax = AJAX();
    ajax.onreadystatechange = function () {
        if (ajax.readyState == 4) {
            var TicketList = eval("(" + ajax.responseText + ")");
            if (TicketList.ListCount > 0) {
            document.getElementById("opencount").innerHTML = TicketList.ListCount +" Open Tickets";
                for (Ticket in TicketList.Tickets) {
                // add stuff to DOM
                //AddTicketToList(TicketList.Tickets[Ticket]);
                }
            }
            else {
                document.getElementById("opencount").innerHTML = "All Tickets Reviewed";
                DisplayNoresults();
            }
        }
    }
    ajax.open("GET", "http://website.com/ListTicketsRequest.ashx?PageNumber=1&PageSize=1&Status=Open", true);
    ajax.send(null);
    //document.addEventListener("deviceready", onDeviceReady, false); 
    //event to check for PhoneGap
    //$('ul').listview('refresh');
    $('#mtickets').page();
    //showVars();
}

function AJAX()
{
    var xmlHttp;
    try
    {
        xmlHttp = new XMLHttpRequest();
    }
    catch (e)
    {
    }
    return xmlHttp;
}

** TicketList是JSon中的变量,如此=

{"Tickets" : [{"TicketID": "1054","Category": "N/A","SubmittedUserID": "bob.thebuilder","ShortDescription": "test question QID:16668","CreationDate": "2/16/2011 12:24:19 PM","TicketStatus": "Open","LongDescription": "Something is wrong with this question I know I hve the right answer but it keeps telling me I'm wrong"},{"TicketID": "1053","Category": "Mission Support","SubmittedUserID": "dave","ShortDescription": "Make  courseware revisions","CreationDate": "2/16/2011 9:34:48 AM","TicketStatus": "Open","LongDescription": "Find help tickets generated by users for possible courseware update."}], "PageCount": "6", "ListCount": "11"}

关于PhoneGap的注意事项如果您尝试将phoengap功能包含在也可以在浏览器中执行代码的位置,请确保仅在“deviceready”上添加手机间隙功能或您的浏览器将无法呈现。例如:

function onload(){
        //event to check for PhoneGap
        document.addEventListener("deviceready", onDeviceReady, true);
}
...
function onDeviceReady() 
    {
        // Now PhoneGap API ready
        vibrate(90); // vib to ack pg ready
        $("a").click(function(event){
        vibrate(30); // add 30 sec vib to all links
        });         
    }

3 个答案:

答案 0 :(得分:1)

我的立即回应是使用jQuery's getJSON method,因为您正在使用jQuery。 jQuery的AJAX提供了更广泛的浏览器兼容性。此外,每次使用eval()时,某个小婴儿都会哭泣。

var url = "http://website.com/ListTicketsRequest.ashx?PageNumber=1&PageSize=1&Status=Open";

$.getJSON(url ,function(TicketList){
    if (TicketList.ListCount > 0) {
        $("#opencount").html(TicketList.ListCount +" Open Tickets");
        for (Ticket in TicketList.Tickets) {
            ...
        }
    } else {
        $("#opencount").html("All Tickets Reviewed");
        DisplayNoresults();
    }
});

如果这仍然不适合您,请确保返回的JSON有效。但是请坚持这种方法,不要使用eval !!

简化更新

var url = "http://website.com/ListTicketsRequest.ashx?PageNumber=1&PageSize=1&Status=Open";
$.getJSON(url ,function(AnyNameYouWant){
   alert(AnyNameYouWant.ListCount + " Open Tickets");
});

更新使用'数据'

如果您的网址太长,您可能会遇到问题。建议通过data参数传递url数据。

var url = "http://website.com/ListTicketsRequest.ashx";
var data = "PageNumber=1&PageSize=1&Status=Open";

$.getJSON(url, data, function(AnyNameYouWant){
   alert(AnyNameYouWant.ListCount + " Open Tickets");
});

答案 1 :(得分:1)

查看您的代码,我觉得语法错误不在您发布的代码中,而是包含在您在ajax.responseText中评估的JSON对象中。看一下AJAX请求返回的数据。它是有效的Javascript吗?您正在呼叫的页面是否会返回与桌面浏览器和移动设备不同的内容?是否存在JSON代码应该出现的错误消息?

答案 2 :(得分:1)

另一种可能性:您的应用是否在website.com上运行?如果没有,Firefox可能会阻止XMLHttpRequest正常运行。 Firefox 3及更低版本阻止了跨站点AJAX请求。 Firefox 3.5 seems to allow some exceptions