简体   繁体   中英

php can not get the data send by ajax

this is the js code, ajax has two arguments, the first is url, 2nd is a object which contains type data and onsuccess. (I didn't use jQuery but the function I define myself, the code is at the end of the question) I just want to send the 'text' string to php, so is there any problem to do like this? I also have tried change the data to data: {searchinput:"text"}, but still don't work.

 ajax( 'http://localhost/test.php', { type: 'POST', data: "searchinput=text", onsuccess: function (responseText, xhr) { console.log(responseText); } } ); 

this is the php code, sorry for changing the code wrong while pasting it on.

 $searchinput = $_POST["searchinput"]; @ $db = new mysqli('localhost', 'root', '', 'text'); if (mysqli_connect_errno()) { echo "error:can not connect database"; } $query = "select * from text where data like'".$searchinput."%' "; $result = $db->query($query); 

then the error is

Undefined index: searchinput

I have search some method like change onsuccess function to setTimeout, and do ajax again, but it doesn't work, just send the data again but the php still can't get the data

this is the ajax function

 function ajax(url, options) { if (!options.type) { options.type = "post" }; var xhr = new XMLHttpRequest(); xhr.open(options.type, url, true); xhr.send(options.data); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { options.onsuccess(xhr.responseText, xhr) } else { options.onfail(xhr.responseText, xhr); } }; } } 

Well, since you used the ajax wrong, I'm not surprised. There should be a error in the console.

jQuery AJAX is used like this:

$.ajax({
        url: "http://localhost/test.php",
        type: 'POST',
        data:  {searchinput: text},
        success: function (responseText, xhr) {
            console.log(responseText);
        }
    }
);

url is a part of the object the ajax expects, so it needs to be inside and not outside of it. Also, data is expecting another object, you gave it a plain string.

Also, as @Muhammad Ahmed stated in his answer, you are using a wrong variable in your php code.

Edit: AJAX in JavaScript without jQuery:

var request = new XMLHttpRequest();
request.open('POST', 'http://localhost/test.php', true);

request.onreadystatechange = function() {
  if (this.readyState === 4) {
    if (this.status >= 200 && this.status < 400) {
      // worked
      var data = JSON.parse(this.responseText);
    } else {
      // failed
    }
  }
};
request.send();
request = null;

send data value like below and use print_r($_POST) on php page to see values are coming or not

$.ajax(

    {   url: 'test.php',
        type: 'POST',
        data:{
                searchinput:text
             },
        onsuccess: function (responseText, xhr) {
            console.log(responseText);
        }
    }
);

Try with this code you were using ajax in wrong manner. You can learn more about how ajax works and how to code for ajax over http://api.jquery.com/jquery.ajax/

$.ajax( 
    {
        type: 'POST',
        url : 'http://localhost/test.php',
        data:  {searchinput:text},
        success: function (responseText, xhr) {
            console.log(responseText);
        }
    }
);

and within your PHP file you need to update your typo ie you were getting value of your POST in $searchcon variable

$searchcon = $_POST["searchinput"];
^^^^^^^^^^

and within your query you were using

$query = "select * from text where data like'".$searchinput."%' ";
                                              ^^^^^^^^^^^^^^

it should be like

$query = "select * from text where data like'".$searchcon."%' ";
                                               ^^^^^^^^^^
$searchcon = $_POST["searchinput"];
@ $db = new mysqli('localhost', 'root', '', 'text');
if (mysqli_connect_errno()) {
    echo "error:can not connect database";
}
$query = "select * from text where data like'".$searchinput."%' ";
$result = $db->query($query);

In This code there is a mistake on ist line you are using variable $searchcon and on query you are using $searchinput change ist varaible name to $searchinput instead of $searchcon. and also change your ajax code.

$.ajax({
        url: "http://localhost/test.php",
        type: 'POST',
        data:  {searchinput: text},
        success: function (responseTxt, xhr) {
            console.log(responseTxt);
        }
    }
);

Try this code :

 var other_data = $('form').serializeArray(); $.ajax({ url: 'work.php', data: other_data, type: 'POST', success: function(data){ console.log(data); } }); 

or

you can also pass the data in url also. Try the code which suits your requirement.

 $.ajax({ url: 'work.php?index=checkbox&action=empty', type: 'POST', success: function(data){ console.log(data); } }); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM