使用Ajax、PHP和Javascript
我在任何方面、形状或形式上都不如你们中的大多数人接近或有经验。然而,与Javascript相比,我在PHP方面的经验稍好一些。所以,请原谅,如果我的代码看起来平庸或“新手” 无论如何,我有一个单一的页面,表单上有一个简单的输入框,然后是两个复选框。我第一次使用ajax,从某种意义上说,我能够让我的代码正常工作。在我的PHP代码中,我让它根据选中的复选框运行某些东西。但是,对于这个ajax代码(和/或PHP),当它执行我的代码时,它会运行我的所有代码,即使复选框是否选中。我在这里问你是否看到我做错了什么: [index.php->表单代码]使用Ajax、PHP和Javascript,javascript,php,html,ajax,Javascript,Php,Html,Ajax,我在任何方面、形状或形式上都不如你们中的大多数人接近或有经验。然而,与Javascript相比,我在PHP方面的经验稍好一些。所以,请原谅,如果我的代码看起来平庸或“新手” 无论如何,我有一个单一的页面,表单上有一个简单的输入框,然后是两个复选框。我第一次使用ajax,从某种意义上说,我能够让我的代码正常工作。在我的PHP代码中,我让它根据选中的复选框运行某些东西。但是,对于这个ajax代码(和/或PHP),当它执行我的代码时,它会运行我的所有代码,即使复选框是否选中。我在这里问你是否看到我做错
在下面输入tweet URL以开始使用该服务。
我们已成功完成您的请求,请立即查看twitter。或者,只需单击。
推特网址
我们喜欢或转发的推文的URL。例子:https://twitter.com/topIess/status/411632658683150336
那条推特你想要什么?
推数
宠儿
启动进程。。。
[index.php->javascript]
函数postStuff(){
//创建XMLHttpRequest对象
var hr=新的XMLHttpRequest();
//创建一些我们需要发送到PHP文件的变量
var fn=document.getElementById(“url”).value;
var ln=document.getElementById(“复选框-0”).value;
var url=“handle1.php”;
var ln1=document.getElementById(“复选框-1”).value;
var vars=“url=“+fn+”&retweet=“+ln+”&favorite=“+ln1;
hr.open(“POST”,url+”?x=“+nn+”&y=“+nn1,true”);
hr.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
//访问XMLHttpRequest对象的onreadystatechange事件
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
var return_data=hr.responseText;
document.getElementById(“status”).innerHTML=返回数据;
}
}
//立即将数据发送到PHP…并等待更新status div的响应
hr.send(vars);//实际执行请求
document.getElementById(“status”).innerHTML=“处理…”;
}
[handle1.php->my php代码]
在javascript中,您正在发布复选框的值
属性,在这种情况下使用该属性是错误的(因为复选框的值总是相同的)。相反,您应该检查checked
属性是否为true,这定义了复选框是否为选中状态。您在哪些浏览器中测试过此功能?Firefox、Chrome和Safari。您应该将if条件置于循环之外。这并不能解决问题,但会使脚本稍微快一点。我是说最后两个循环。乔尼,谢谢你的建议!我在我的代码中改变了这一点,非常感谢。我已经将“值”改为“检查”,并理解输出为真/假。你对PHP有什么建议?检查类似于$\u POST['retweet']=“true”
?@user2970029这取决于浏览器引擎如何字符串化布尔值,您还应该检查POST的值是否为“1”
,而不仅仅是“true”
。
<form method="post" class="form-horizontal">
<fieldset>
<!-- Form Name -->
<legend>Enter the tweet URL below to begin using the service.</legend>
<div id="ajaxDiv" class="alert alert-success">We've successfully completed your request, check twitter now. Or, simply click <a href="<?php echo $_POST['url']; ?>">here</a>.</div>
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="url">Tweet URL</label>
<div class="controls">
<input id="url" name="url" type="text" style="height:43px; width:100%; font-size:18px;" placeholder="" class="input-xlarge" required="">
<p class="help-block">The URL of the tweet we are favouriting or retweeting. <span style="font-size:15px;">Example: https://twitter.com/topIess/status/411632658683150336</span></p>
</div>
</div>
<!-- Multiple Checkboxes -->
<div class="control-group">
<label class="control-label" for="checkboxes">What would you like for that tweet?</label>
<div class="controls" required="required">
<label class="checkbox" for="checkboxes-0">
<input type="checkbox" style="margin-top:15px;" name="retweet" id="checkboxes-0" value="Retweet">
Retweets
</label>
<label class="checkbox" for="checkboxes-1">
<input type="checkbox" name="favorite" style="margin-top:15px;" id="checkboxes-1" value="Favourite">
Favourites
</label>
</div>
</div>
<!-- Button -->
<div class="control-group">
<label class="control-label" for="submit"></label>
<div class="controls">
<button type="submit" onclick="postStuff();" class="btn btn-inverse">Start Process... </button>
</div>
</div>
</fieldset>
</form>
<div id="status"></div>
<script>
function postStuff(){
// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();
// Create some variables we need to send to our PHP file
var fn = document.getElementById("url").value;
var ln = document.getElementById("checkboxes-0").value;
var url = "handle1.php";
var ln1 = document.getElementById("checkboxes-1").value;
var vars = "url="+fn+"&retweet="+ln+"&favorite="+ln1;
hr.open("POST", url+"?x="+nn+"&y="+nn1, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("status").innerHTML = return_data;
}
}
// Send the data to PHP now... and wait for response to update the status div
hr.send(vars); // Actually execute the request
document.getElementById("status").innerHTML = "Processing...";
}
</script>
<?php
/**
* @file
* User has successfully authenticated with Twitter. Access tokens saved to session and DB.
*/
require_once('twitteroauth/twitteroauth.php');
$con=mysqli_connect("host","user","","twtid");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM twitter");
while($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
$connection[$row['id']] = new TwitterOAuth('ZG808c0pad0ar7wpgYPmA', 'BWHnOag1aWQtoYRBH5OtsI9m9Ghr3pTuMBo6z4ZNNP8', $row['key'], $row['secret']);
}
/* Create a TwitterOauth object with consumer/user tokens. */
/* $content = $access_token['oauth_token']. " " . $access_token['oauth_token_secret']; */
/* $content = $connection->get("account/verify_credentials"); */
$url1 = parse_url($_POST['url'], PHP_URL_PATH);
$url = explode("/", $url1);
/* If method is set change API call made. Test is called by default. */
$method = 'statuses/retweet/'.$url[3];
$amt = 18;
$sub = rand(1,2);
$amt1 = $amt-$sub-1;
for ($x=1; $x<=$amt; $x++)
{
if($_POST['retweet'] == "Retweet"){
$content = twitteroauth_row($method, $connection[$x]->post($method), $connection[$x]->http_code);
}
if($x == $amt) {
$done = "yes";
}
}
for ($x1=1; $x1<=$amt1; $x1++)
{
if($_POST['favorite'] == "Favourite"){
$content = $connection[$x1]->post('favorites/create', array('id' => $url[3]));
}
}