JQuery.get 语法错误


JQuery.get Syntax Error

我一直在疯狂地试图弄清楚这一点。 我有一个 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>');