我一直在疯狂地试图弄清楚这一点。 我有一个 PHP 脚本,它返回 true/false,标头设置为内容类型:文本/纯文本。
当我使用像这样的简单 .get 时:
$.get("ip.php");
我可以看到呼叫和火虫中加载的数据。
但是,当我尝试增加更多复杂性时,我得到"语法错误:语法错误"。 这是我正在使用的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>");
}
我做错了什么? 提前感谢您的帮助。
这是因为 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>");
}
});
更好的是:改用延迟对象,如.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');
});
虽然另一个答案是正确的,但它不是您看到的错误的来源。 错误来自以下行:
$(".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>');