我使用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
答案 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变量显示在成功处理程序内部,或者从那里触发需要发生的任何事情。