2016-07-15 4 views
0

を返しません。設定されるはずのPHP変数は、Ajax($ uniqueend)によって実行される.phpファイルによって返されます。jQueryのAjaxのPOSTは、私は、以下の機能を持っているPHPの変数

はこちらをご覧ください:

<?php 
//open a database connection 
include("../db.php"); 

//receive value 
$currNum = $_POST['currentNumber']; 
$uidd = $_POST['usersid']; 

$results7 = mysql_query("SELECT * FROM `uc_posts` WHERE `postinguser` IN (SELECT `followers` FROM `uc_users` WHERE `id` = $uidd) AND id < $currNum ORDER BY id DESC LIMIT 20"); 

sleep(1); 

while ($row = mysql_fetch_array($results7)) { 
echo '<div class="postfeed2">'; 
    $color='#ababab'; 
    $id = $row['id']; 
    $page = $row['page']; 
    $postinguser = $row['postinguser']; 
    $displayname=mysql_fetch_array(mysql_query("SELECT `display_name` FROM `uc_users` WHERE `id` = $postinguser LIMIT 1")); 
    $username=mysql_fetch_array(mysql_query("SELECT `user_name` FROM `uc_users` WHERE `id` = $postinguser LIMIT 1")); 
    $checkiffav=mysql_fetch_array(mysql_query("SELECT * FROM `uc_posts` WHERE find_in_set($uidd,`likedby`) AND `id` = $id")); 
    if ($checkiffav) { 
    $color='#FF5733'; 
    } 
    echo '<table><tr><td style="vertical-align: baseline;"><b><img src="blank-user-medium.png" width="50px" height="50px" style="vertical-align: text-top;margin-right: 8px;margin-top: 0px;border: 0px solid #D0D0D0;border-radius: 5px 5px 5px 5px;"></b></td>'; 
    echo '<td style="display: block;word-break: break-word;"><b>' . $displayname[display_name] . '</b>'; 
    echo ' <span style="color:#ababab;">@' . $username[user_name] . '</span>'; 
    echo '<br>' . $page . ''; 
    echo '<br><a href="javascript:void(0)" onclick="javascript:return like(' . $id . ',' . $uidd . ');"><i class="fa fa-heart fa-lg" id="heart' . $id . '" style="margin-top: 5px;color:' . $color . '"></i></a></td></tr></table>'; 

echo '</div>'; 
} 

$uniqueend2 = mysql_fetch_array(mysql_query("(SELECT * FROM `uc_posts` WHERE `postinguser` IN (SELECT `followers` FROM `uc_users` WHERE `id` = $uidd) AND id < $currNum ORDER BY id DESC LIMIT 20) ORDER BY id ASC")); 

$uniqueend = $uniqueend2['id']; 

echo $uniqueend; 

?> 

私はそれがエコーすることを見ることができます:184しかし、私は何もありません確認するためにjQueryのに追加の警告に。

私はjsonを使用しますが、私は大量のPHP /コンテンツデータを返しますので、どのようにしてそれが収まるかわからないのです。

ありがとうございます!

+0

基本的には、変数を変更したところでajaxリクエストを行い、変更された変数を実際にエコーするために 'echo'文を実行していますか?それはどのように動作するのですか? 'echo'文は、ページがブラウザに送られるずっと前にサーバー上で起こります。そして、Ajax呼び出しが起こる前に、サーバー上のその変数を後で変更しても、過去にエコーされたもの。 – adeneo

+0

そのコードは非常に危険です。あなたは[SQLインジェクション攻撃](http://bobby-tables.com)に脆弱です。そのクエリーが決して失敗しないと思っているだけです。両方ともひどく悪いことです。 –

+0

@MarcB後で.phpファイルの投稿データを確認するつもりでした。私は最初に私のために働いていた機能を手に入れたいと思っていました。 – Ben

答えて

1

このようにAjaxは機能しません。サーバーでのPHPスクリプトの戻り値は、ブラウザへの応答として送信され、success-callback関数のdataパラメーターに入れられます。だから、あなたのIDはデータにあり、あなたはそれに取り組まなければならないでしょう。

はこのようにそれを試してみてください。

$(window).scroll(function() { 
if(ready && labelstatus && $(window).scrollTop() + $(window).height() > $(document).height() - 100){ 
    $('#bottom2').html(loading); 
    ready = false; 
    $.ajax({ 
    url: 'scripts/nearbothome.php', 
    data: {"currentNumber": botnumber, "usersid": usersid}, 
    type: 'post', 
    success: function(data) { 
    botnumber = data; 
    alert(data); 
    $('#oldposts').append(data); 
    $('#bottom2').html(bottom); 
    ready = true; 
    labelstatus = data; 
    if (data < 1) { 
    labelstatus = false; 
     } 
    } 
    });  
} 
}); 

コメントの後:

あなたはすぐにそれを出力するのではなく、変数にあなたのhtmlを置くことができます。そして

$(window).scroll(function() { 
if(ready && labelstatus && $(window).scrollTop() + $(window).height() > $(document).height() - 100){ 
    $('#bottom2').html(loading); 
    ready = false; 
    $.ajax({ 
    url: 'scripts/nearbothome.php', 
    data: {"currentNumber": botnumber, "usersid": usersid}, 
    type: 'post', 
    success: function(data) { 
    botnumber = $data['id']; 
    alert($data['id']); 
    $('#oldposts').append($data['id']); 
    $('#bottom2').html(bottom); 
    ready = true; 
    // don't know what you are trying to do from here on 
    labelstatus = data; 
    if (data < 1) { 
    labelstatus = false; 
     } 
    } 
    });  
} 
}); 
+0

私は 'データ'を使用すると返される余分なコードを追加しました。どのように私は2つを分離し、同じ要求を使用して戻るかもしれないかを私に見せてください。ありがとう! – Ben

+0

htmlをすぐに出力するのではなく、変数に入れることができます。そして、htmlとidを '$ returnArray ['html'] = $ htmlのような配列に入れます。 $ returnArray ['id'] = $ uniqueend; '、編集回答 – Philipp

+0

私はそれを動作させることができます場合は、ソリューションをありがとうございます。あなたのコメントの後に最後のビットをBtwは、それが底に達している場合、実行中の機能を停止することです。それ以上のデータが返されなければ、最後に到達します。私はちょうど 'if($ data ['html'] <1){' – Ben

2

$html = "<div>"; 
// add more html into variable 
$html .= "</div>; 
$returnArray['html'] = $html; 
$returnArray['id'] = $uniqueend; 

のような配列にhtmlとIDを入れて、あなたのフロントエンドであなたは、あなたのデータでこれらのインデックスにアクセスする必要があるこれは本当によくある誤解です。あなたのjavascriptではPHPコードを呼び出そうとしていますが、jsはブラウザ上で動作し、PHPを解析することも、サーバー側のPHP変数にアクセスすることもできません。 JQueryは、データ変数でブラウザに送信されたものを返します。そして、そこにアクセスする必要があります。これを行うために、コードは次のようになります。

$(window).scroll(function() { 
if(ready && labelstatus && $(window).scrollTop() + $(window).height() > $(document).height() - 100){ 
    $('#bottom2').html(loading); 
    ready = false; 
    $.ajax({ 
    url: 'scripts/nearbothome.php', 
    data: {"currentNumber": botnumber, "usersid": usersid}, 
    type: 'post', 
    success: function(data) { 
    botnumber = data; 
    alert(data); 
    $('#oldposts').append(data); 
    $('#bottom2').html(bottom); 
    ready = true; 
    labelstatus = data; 
    if (data < 1) { 
    labelstatus = false; 
     } 
    } 
    });  
} 
}); 

あなたがブラウザに送信する他の情報を持っている場合だけでなく、あなたが異なるパラメータを持つ複数の要求をしたり、JSONレスポンスを送り返すとJavaScript側でそれを解析する必要がありますどちらか。 json経由でかなり大量のデータを送信することができます。 json経由で送信するデータが多すぎる場合は、おそらく複数のリクエストを送信する必要があります。私が上で述べたように、あなたはjavascriptの中のPHP変数にアクセスすることはできません。

+0

私は 'data'を使用すると返される余分なコードを追加しました。どのように私は2つを分離し、同じ要求を使用して戻るかもしれないかを私に見せてください。ありがとう! – Ben

+0

@Ben単純なHTMLを渡すのではなく、jsonとして渡すだけです。 PHPでは、配列を作成し、それをページに出力するためにechoを使うのではなく、配列の値として格納してから、json_encodeを使ってそれをエンコードします。次に、jsonをエコーし​​、json配列からhtmlを取得します。次に、他の情報を値として配列に格納し、同じ方法で取得することもできます。 –

+0

これらのリンクは、必要なものをカバーする必要があります。 [JSONエンコード](http://php.net/manual/en/function.json-encode.php) および[JQuery getJson](http://api.jquery.com/jquery.getjson/) –

関連する問題