无法获得Ajax响应

时间:2014-11-29 08:57:16

标签: javascript php ajax

我使用javascript和php来运行Ajax代码。 目前的结果尚未确定。

我正在使用localStorage从Ajax函数移动变量,因为我无法理解回调的使用(我已经遵循了许多使用回调的例子,但没有一个有效。我认为这个解决方案可能是最不复杂的。

使用Javascript:

$( document ).ready(function() {

   $('#submit-values').click(function(e){
        /************************************************************* SUBMIT */
        e.preventDefault();//Stop page reload on click

        $('#put-output-here').val(createParagraph());

   });

   function createParagraph(){
        createSentence();
        return localStorage.getItem('sentence');
   }

   function createSentence(){
        $.when(ajax1()).done(function(a1){
            localStorage.setItem('sentence', a1);
        })
   }

   function ajax1(){
       $.post("word-engine.php",
        {

        },
        function(data){
        });
   }
});

PHP:

<?php
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';


    $randomString = '';
    for($x = 0; $x < 10; $x++){
        $rand = rand(0,62);
        $randomString = $randomString.$chars[$rand];
    }
    echo $randomString;

?>

目前我的结果是undefined

2 个答案:

答案 0 :(得分:2)

使用它:因为$.post是一个异步函数。来自函数的控件将在运行后立即返回,但可能会在稍后收到来自post的响应。

function ajax1(){
   $.post("word-engine.php",
    {

    },
    function(data){
        setdata(data);
    });
}

function setdata(data){
    localStorage.setItem('sentence', data);
}

注意:了解更多信息,请参阅此帖子:why cant I return data from $.post (jquery)

答案 1 :(得分:1)

你需要$ .post函数的done事件而不是包装该函数的函数。

E.g。

$.post( "word-engine.php", function( data ) {
  localStorage.setItem('sentence', data );
});

在'完成'/返回ajax帖子后,它会将返回的值放入localStorage'句子'键。 post函数的第一个param是端点的URL,下一个是成功处理函数。然后,您可以指定更多包括失败的回调函数处理程序等。有关详细信息,请参阅docs here

@suchit提出了一个很好的观点,你将无法立即访问localStorage中的值,因为post是异步事件,javascript代码将继续,并且在收到响应时将发生回调。您最好将显示返回的localStorage变量显示在成功处理程序内部,或者从那里触发需要发生的任何事情。