我一直在疯狂地试图解决这个问题。我有一个PHP脚本返回true / false,标题设置为Content-Type:text / plain。
当我使用像这样的简单.get:
$.get("ip.php");
我可以看到调用和加载在firebug中的数据。
然而,当我尝试添加更多复杂性时,我得到了#34; SyntaxError:syntaxerror"。这是我正在使用的jquery:
var hello;
$.get('ip.php', function(data){
hello = data;
console.log(hello);
});
if (hello == "false") {
$( "#status").removeclass("working").addClass("notworking");
$(".stat").html("<li class="title">STATUS: NOT WORKING</li>");
} else {
$(".stat").html("<li class="title">STATUS: WORKING</li>");
}
我做错了什么?在此先感谢您的帮助。
答案 0 :(得分:5)
这是因为AJAX调用是异步的 - 在jQuery实际收到服务器的响应并更新hello
变量之前评估条件语句。
因此,解决方案是将条件语句移动到$.get()
的成功回调中。
p / s:此外,您没有正确转义.html()
中的字符串。使用\"
来转义双引号,或使用单引号,即'
。
var hello;
$.get('ip.php', function(data){
hello = data;
if (hello == "false") {
$( "#status").removeclass("working").addClass("notworking");
$(".stat").html("<li class=\"title\">STATUS: NOT WORKING</li>");
} else {
$(".stat").html("<li class=\"title\">STATUS: WORKING</li>");
}
});
更好:改为使用deferred objects,例如.done()
,.fail()
,.always()
等等(只要您认为合适)。它们提供了更好的多功能性,允许您在代码中的任何位置检查AJAX调用的状态:
var ip = $.get('ip.php'); /* Make GET request */
/* Deferred object */
ip.done(function(data){
if (data == "false") {
$( "#status").removeclass("working").addClass("notworking");
$(".stat").html("<li class=\"title\">STATUS: NOT WORKING</li>");
} else {
$(".stat").html("<li class=\"title\">STATUS: WORKING</li>");
}
}).fail(function(jqXHR, textStatus, errorThrown){
// Optional
// console.log('.get failed ' + textStatus + ' ' + errorThrown);
}).always(function(){
// Optional
// console.log('$.get completed regardless of status');
});
答案 1 :(得分:2)
虽然另一个答案是正确的,但不是您所看到的错误的来源。错误来自以下几行:
$(".stat").html("<li class="title">STATUS: NOT WORKING</li>");
} else {
$(".stat").html("<li class="title">STATUS: WORKING</li>");
请注意语法高亮显示。您试图在字符串中使用引号,这实际上结束了字符串。你可以像这样逃避它们:
$(".stat").html("<li class=\"title\">STATUS: NOT WORKING</li>");
} else {
$(".stat").html("<li class=\"title\">STATUS: WORKING</li>");
或者在某处使用单引号而不是双引号:
$(".stat").html('<li class="title">STATUS: NOT WORKING</li>');
} else {
$(".stat").html('<li class="title">STATUS: WORKING</li>');