我可以在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
});
}
答案 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