2011-02-23 45 views
0

我可以在Android应用程序中运行此代码(使用PhoneGap和jQuery Mobile),但不能在桌面浏览器上运行。 它给我的萤火此行语法错误=阿贾克斯浏览器损坏在Android中工作

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 
     });   
    } 

回答

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

简化UPDATE

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

更新以 'DATA'

如果您的网址太长,你可能会开始遇到的问题。建议通过data参数传递网址数据。在你的代码

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"); 
}); 
+0

好的,我该如何更换eval()?函数(TicketList){}应该以某种方式解析数据。 BTW TicketList是一个变量,看起来像上面的编辑。 – gooddadmike 2011-02-23 21:30:52

+0

'function(TicketList){}'不是一个名为TicketList的函数。它是一个通用函数(没有名字),它传递了一个叫做“TicketList”的变量。把你的代码放到那个函数中,并像使用'TicketList'变量那样使用'TicketList'变量。 '.getJSON()'函数处理幕后的eval。 – Dutchie432 2011-02-23 21:41:18

+0

看到我上面的简化示例。 – Dutchie432 2011-02-23 21:43:28

1

来看,它很可能对我来说,语法错误是不是在你发布的代码,而是包含在你的ajax.responseText评估JSON对象。看看AJAX请求返回的数据。它有效的Javascript?您所调用的页面是否会返回与桌面浏览器和移动设备不同的内容?有JSON代码应该在哪里的错误消息?

1

另一种可能性:您的应用程序是否在website.com上运行?否则,Firefox可能会阻止XMLHttpRequest正常运行。 Firefox 3及以下版块阻止跨网站AJAX请求。 Firefox 3.5 seems to allow some exceptions

+0

实际上还有一个跨站点浏览器错误以及感谢这个建议。它现在可以在浏览器中使用。 – gooddadmike 2011-02-25 21:19:20