web-dev-qa-db-ja.com

構文エラー:JavaScriptの不正なreturnステートメント

このコードを実行すると、本当に奇妙なJavaScriptエラーが発生します。

<script type = 'text/javascript'>
var ask = confirm('".$message."');
if (ask == false)
{
    return false;     
}

else
{
    return true;
}
</script>

JavaScriptコンソールでは次のように表示されます。

Syntax Error: Illegal return statement

return true;およびreturn false;で発生します

(このjavascriptをphp関数からエコーしています。$message変数はphpパラメーターの1つです)

私のコードの何が問題になっていますか?

52
imulsion

returnは、関数内でのみ意味があります。コードに関数はありません。

また、あなたのコードは、冗長部門の部門の場合に価値があります。適切な機能に移動すると仮定すると、これはより良いでしょう:

return confirm(".json_encode($message).");

ずっと後で編集:json_encodeを使用するようにコードを変更し、メッセージのアポストロフィが原因でメッセージの内容が壊れないようにしました。

82

何らかの値を返したい場合は、ステートメントを関数でラップします

function my_function(){ 

 return my_thing; 
}

問題は、PHPを使用する場合の1行目のステートメントにあります

var ask = confirm ('".$message."'); 

PHPを使用する場合は、使用する必要があります

 var ask = confirm (<?php echo "'".$message."'" ?>); //now message with be the javascript string!!
4
prabeen giri

関数ブロック内でのみ使用されるjavascriptのreturnステートメント。独立した内部でreturnステートメントを使用しようとすると、ブロックされる場合は構文エラーをトリガーします:JavaScriptの不正なreturnステートメント

このようなエラーを回避するためのサンプルコードを次に示します。

<script type = 'text/javascript'>
(function(){
    var ss= 'no';
    if(getStatus(ss)){
        alert('Status return true');   
    }else{
        alert('Status return false'); 
    }

    function getStatus(ask){
        if(ask=='yes')
        {
        return true;     
        }
        else
        {
        return false;
        }
    }
})();
</script>

Jsfiddle の例を確認してください

0
Sunny S.M

どこに値を返そうとしていますか?デバッグには開発ツールでコンソールする方が良い

<script type = 'text/javascript'>
var ask = confirm('".$message."');
function answer(){
  if(ask==false){
    return false;     
  } else {
    return true;
  }
}
console.log("ask : ", ask);
console.log("answer : ", answer());
</script>
0

私の経験では、ほとんどの場合、このエラーメッセージは、偶発的な閉じブレースをどこかに置き、残りのステートメントを関数の外に置いたことを意味します。

例:

function a() {
    if (global_block) //syntax error is actually here - missing opening brace
       return;
    } //this unintentionally ends the function

    if (global_somethingelse) {
       //Chrome will show the error occurring here, 
       //but actually the error is in the previous statement
       return; 
    }

    //do something
}
0
K48