2016-12-10 7 views
0

後に '未定義' の値を持っています変数 "encontradoは" 私はこのコードを持っているコールバック関数

はJavaScript:

function foo(callback){ 
    var producto = $("#inpt-producto").val(); 

    var ajax = new XMLHttpRequest(); 
    var url = "file_products.php"; // It will return 1 or 0 
    var params = "producto=" + producto; 
    ajax.open("POST", url, true); 


    ajax.onreadystatechange = function() 
    { 
     if(ajax.readyState == 4 && ajax.status == 200) { 

      callback(ajax.responseText); 

     } 
    }; 

    ajax.send(params); 
} 

PHP:

$objectProduct = new product_Model(); 
$option = $objectProduct->existProduct($codProduct); // return 1 or 0 
echo $option 

それは罰金作品私。しかし、次のコードは機能しませんでした。

var encontrado = foo(function(result){ // I need store it in "encontrado" variable. 
    console.log(result);//Actually return 1 or 0 value 
}); 
console.log(encontrado); //Return Undefined :-(

ファイルfile_products.phpリターン1つのまたは0

変数encontrado保管していなかったデータ。これは "未定義"に等しい。私はストアのPHP値のリターンが必要です。私は懸命に働いていますが、その解決策を見つけられませんでした。

私はそれを修正するために何ができますか?何か案が ?

ありがとうございました。この場合

+0

一部のPHPコードを表示 – wscourge

+0

こんにちは@wscourge。 これは(一部ではない)PHPスクリプトの一部です。私はそれをテストし、素晴らしい作品。 必要....... $ objectProduct = new product_Model(); $ option = $ objectProduct-> existProduct($ codProduct); // 1または0を返す echo $ option; – Gregory

+0

// JavaScriptで側 ajax.onreadystatechange =関数(){ (ajax.readyStateの== 4 && ajax.statusの== 200){ コールバック(ajax.responseText)であれば、 } }; 私はそれをテストし、正常に動作します。私はFirefoxのコンソールを使用してPHPの結果を見るために。正しい値が返されました。問題はJavascript側です。 – Gregory

答えて

0

、変数encontradofoo関数の戻りに設定されているが、foo機能は全く何も返さないので、undefinedです。私はencontradoをajax呼び出しの結果に設定したいと思っているので、次のコードを実行します。

var encontrado; 
foo(function(result){ 
    encontrado = result; 
    console.log(encontrado); 
}); 

、心のencontradoに保つには、コールバックが発生した場合を除き、まだundefinedとなりますので、コールバックが実行されるまで、それを使用しようとしないでください。

さらに、encontradoがコールバックの結果であると予想していたかもしれませんが、それはJavaScriptの仕組みではありません。代わりにfoo関数の戻り値に設定されていました。また、考えられる混乱を解消するために、console.logは値を返さず、コンソールに出力して実際に値を返します。return some_variable;

+0

あなたのコードでは、ajaxリクエストに 'params'文字列を追加していないという別のエラーがあります。リクエストを送信する前に、パラメータがリクエストに正しく追加されていることを確認してください。 – djdduty

0

これは、親知らずの解決策です、大丈夫です。しかし、 "async:false"が使用されます。

if(producto!=""){ 
     encontrado = foo(); 
    } 

    if(nombre==""){ 
     $("#messagesDiv").html("Field is empty"); 
     isValid = false; 
    }else 
    if(encontrado==1){ 
      $("#messagesDiv").html("Field is empty."); 
      $("#inpt-producto").focus(); 
     isValid = false; 
    } 

    ...... 
    more validations.... 
    ...... 
    ...... 

    if(isValid){ 
    //Request and save data in Data base 
    } 



function foo() 
{ 

    var producto = $("#inpt-producto").val(); 
    var parameters = "producto=" + producto ; 

    url = 'producto.php', 

    ajax = new XMLHttpRequest(), 
    u = null; 

    ajax.open('POST', url, false); 
    ajax.onreadystatechange = function() 
    { 
     if (ajax.readyState == 4) 
     { 
      if (ajax.status == 200){ 
       u = ajax.responseText; 
      } 
     } 
    }; 

    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    ajax.setRequestHeader("Connection", "close"); 
    ajax.send(parameters); 

    return u; 
} 

今のところ問題ありません。しかし、私はそれを変えて改善すると思います。 jQueryの「Deferred Object」が見つかりました。作品があります

関連する問題