天道酬勤,学无止境

PHP function not returning any data to JQuery ajax method

I am using jquery's ajax method to post some data to the server and get back the response. Though the server side php code is returning a json encoded string/array, the response is coming back as null.

Could someone point out the mistake that I am making. Below if my jquery ajax method using which I am hitting the postData.php page.

        $.ajax({
            url:'postData.php',
            type:'POST',
            data:data,
            dataType: "json",
            success: function(response){
                console.log(response);
            }
        });

The content in postData.php is pretty straight forward as I am still developing it.

    $data = array();
//inside postData.php
    $data['test']=1;
    return json_encode($data);

It should return a json string, but it is returning null. I also tried echoing a string just after $data array declaration, it does echo it in the firebug, but the response is when I do a console.log on the success callback, it comes back as null.

评论

For getting the result back in your ajax function, you must echo it, not return, like:

$data = array();
$data['test']=1;
echo json_encode($data);

Is that all that is in postData.php? You need to write it out to the buffer (echo json_encode($data);) at some point.

Like morgar pointed it out, you should echo the data back and not use return.

$data = array();
$data['test']=1;
echo json_encode($data); //echo instead of return

At the same time, in your ajax on success function, you should access the response like an array.

**Incorrect**
console.log(response); //--> would return an error

**Should Be**
console.log(response[0]); //--> read the returned first array element

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • jQuery将Ajax结果返回到外部变量(jQuery return ajax result into outside variable)
    问题 我在使用ajax时遇到一些问题。 如何将ajax的所有结果分配给外部变量? 我用谷歌搜索并找到了此代码。 var return_first = (function () { var tmp = null; $.ajax({ 'async': false, 'type': "POST", 'global': false, 'dataType': 'html', 'url': "ajax.php?first", 'data': { 'request': "", 'target': arrange_url, 'method': method_target }, 'success': function (data) { tmp = data; } }); return tmp; }); 但不适合我。 谁能说出该代码出了什么问题? 回答1 您之后缺少逗号 'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' } 另外,如果您希望return_first保存匿名函数的结果,则需要进行一个函数调用: var return_first = function () { var tmp = null; $.ajax({ 'async': false, 'type': "POST", 'global'
  • 带有PHP的jQuery Ajax POST示例(jQuery Ajax POST example with PHP)
    问题 我正在尝试将数据从表单发送到数据库。 这是我正在使用的表格: <form name="foo" action="form.php" method="POST" id="foo"> <label for="bar">A bar</label> <input id="bar" name="bar" type="text" value="" /> <input type="submit" value="Send" /> </form> 典型的方法是提交表单,但这会导致浏览器重定向。 使用jQuery和Ajax,是否可以捕获表单的所有数据并将其提交给PHP脚本(例如, form.php )? 回答1 .ajax的基本用法如下所示: HTML: <form id="foo"> <label for="bar">A bar</label> <input id="bar" name="bar" type="text" value="" /> <input type="submit" value="Send" /> </form> jQuery的: // Variable to hold request var request; // Bind to the submit event of our form $("#foo").submit(function(event){ //
  • Jquery .ajax method="post" 但 $_POST 为空(Jquery .ajax method=“post” but $_POST empty)
    问题 $.ajax({ method: "post" , url: "save.php" , data: "id=453&action=test" , beforeSend: function(){ } , complete: function(){ } , success: function(html){ $("#mydiv").append(html); } }); 我已将方法类型设置为 post 但在 Save.php 中,我只在$_GET或$_REQUEST获取值,但不在$_POST获取值。 我的表格看起来像: <form method="post" id="myform" action="save.php"> 它不起作用,环顾四周和谷歌,尝试添加enctype <form method="post" id="myform" action="save.php" enctype="application/x-www-form-urlencoded"> 但仍然$_POST空? 我如何使它工作? 回答1 而不是method: "post"你需要使用type: "POST" 因此,这应该可以在不更改表单 HTML 的情况下工作: $.ajax({ type: "POST" , url: "save.php" , data: "id=453&action=test"
  • AJAX Mailchimp注册表单集成(AJAX Mailchimp signup form integration)
    问题 是否有任何方法可以将简单的mailchimp(一个电子邮件输入)与AJAX集成在一起,所以没有页面刷新,也没有重定向到默认的mailchimp页面。 此解决方案不起作用jQuery Ajax POST不适用于MailChimp 谢谢 回答1 您不需要API密钥,只需将标准mailchimp生成的表单放入代码中(根据需要自定义外观),然后在表单的“ action”属性中将post?u=更改为post-json?u= ,然后在表单操作的末尾追加&c=? 解决任何跨域问题。 同样重要的是要注意,提交表单时必须使用GET而不是POST。 默认情况下,您的表单标签如下所示: <form action="http://xxxxx.us#.list-manage1.com/subscribe/post?u=xxxxx&id=xxxx" method="post" ... > 改变它看起来像这样 <form action="http://xxxxx.us#.list-manage1.com/subscribe/post-json?u=xxxxx&id=xxxx&c=?" method="get" ... > Mail Chimp将返回一个包含2个值的json对象:'result'-这将指示请求是否成功(我只见过2个值,“ error”和“ success”)和'msg'-一条消息描述结果。
  • AJAX jQuery PHP返回值(AJAX jQuery PHP Return Value)
    问题 我是AJAX的新手,并且对PHP传递回jQuery感到困惑。 因此,您具有如下的AJAX函数: $.ajax({ url: '/my/site', data: {action: 'test'}, type: 'post', success: function(output) { alert(output); } }); (我从ajax的另一个StackOverflow页面上获得了此信息。) 但是在其他各种资源上,他们将拥有成功部分,如下所示: success: function(data) {functionfoocommandshere} 我只是困惑于是什么决定了这个变量的命名? 如果PHP最终回显了一个数组: echo $myVar; 我如何从AJAX获得此信息? 回答1 Ajax-Requests获取整个站点。 因此,您不会在变量中获取任何数据,而会在数据参数中获取整个站点。 您一起做的所有回声都将在此参数中。 如果要检索数组,则应先将其转换为json。 echo json_encode($myArray); 然后,您可以通过Ajax以这种方式接收它 $.ajax({ url: '/my/site', data: {action: 'test'}, dataType: 'json', type: 'post', success: function(output) {
  • jQuery将更多参数传递给回调(jQuery pass more parameters into callback)
    问题 有没有一种方法可以将更多数据传递到jQuery中的回调函数中? 我有两个函数,例如,我想要$.post的回调传递AJAX调用的结果数据以及一些自定义参数 function clicked() { var myDiv = $("#my-div"); // ERROR: Says data not defined $.post("someurl.php",someData,doSomething(data, myDiv),"json"); // ERROR: Would pass in myDiv as curData (wrong) $.post("someurl.php",someData,doSomething(data, myDiv),"json"); } function doSomething(curData, curDiv) { } 我希望能够将我自己的参数以及AJAX调用返回的结果传递给回调。 回答1 解决方案是通过闭包绑定变量。 作为一个更基本的示例,下面是一个示例函数,该函数接收并调用一个回调函数,以及一个示例回调函数: function callbackReceiver(callback) { callback("Hello World"); } function callback(value1, value2) { console.log(value1
  • $_POST 在 ajax 表单提交中不起作用?($_POST is not working in ajax form submit?)
    问题 当我尝试通过 ajax 表单提交检查用户输入名称是否已经存在时!但它只得到Undefined index: username in sessions.php ,缺少什么? <form action="" method="POST" id="saveuser" enctype="multipart/form-data"> <input type="text" name="username"><br> <input type="password" name="pass"><br> <input type="file" name="fileupload"><br> <input type="submit" name="submit" value="Confirm" id="confirm"> </form> <script type="text/javascript"> $('#confirm').click(function(e){ e.preventDefault(); $.ajax({ type:'POST', url :"sessions.php", data:$("#saveuser").serialize(), contentType : false, processData: false, success: function(d){ console.log(d);//
  • jQuery AJAX 表单提交不起作用(jQuery AJAX form submission not working)
    问题 I'm trying to submit a form through AJAX instead of using the normal POST submission. The HTML is just a standard form with method="post" and my jQuery code is as follows: jQuery.noConflict(); jQuery(document).ready( function($) { var $form = $('#default_contact'); $form.submit( function() { $.ajax({ type: 'POST', url: $form.attr( 'action' ), data: $form.serialize(), success: function( response ) { console.log( response ); } }); return false; }); }); (Based on this answer) I'm returning false from the submit function, but the form is still getting submitted and I can't figure out why. Not
  • 使用jQuery Ajax从数据库加载信息(using jquery ajax to load info from database)
    问题 问题 我尝试使用以下 // Start method 1 var grbData = $.ajax({ type : "GET", url : "http://grb.sonoma.edu:81/getgrbs.php", data : "start=0&perPage=3"}).responseText; $("#ajaxDiv").html(grbData); // End method 1 // Start method 2 $.get("getgrbs.php", { start : 0, perPage : 3}, function(data) { $("#tst").html(data); }, "html"); // End method 2 在此页面上:http://grb.sonoma.edu:81/paging.php从数据库加载数据。 方法1似乎只在IE8中起作用,但仅在刷新页面后才起作用。 首次加载页面时,我收到“完成此操作所需的数据尚不可用”。 错误。 我更喜欢方法1的原因是因为它使我可以访问表中的各个行。 例如,每一行都有一个“突发”类。 我在用 $(".burst").click(function() { $(".burst").css("background-color", ""); $(this).css("background-color"
  • Send multiple checkbox data to PHP via jQuery ajax()
    I want to submit a POST form that contains a textarea field and an input field(s) (type="checkbox" with an arbitrary/variable number of checkboxes) on my website via jQuery's .ajax(). PHP receives the textarea data and the ajax response is correctly displayed to the user. However, it seems that PHP is not receiving the checkbox data (was it checked, or not). How can I get this to work? Here is the code I have: The HTML: <form method="post" action="myurl.php" id=myForm> <textarea id="myField" type="text" name="myField"></textarea> <input type="checkbox" name="myCheckboxes[]" id="myCheckboxes"
  • jQuery ajax获取返回值(jquery ajax get return value)
    问题 我想获取html页面的“打印值”。 我在下面的查询中尝试过,但是showGetResult()仅返回“空值” 但是当我尝试此代码时,我的apache服务器日志已打印,我访问了index.php。 (index.php只是打印helloworld) <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"><\script> <script type="text/javascript"> function showGetResult( name ) { var result = null; jQuery.ajax({ url: 'http://localhost/index.php', type: 'get', dataType: 'text/html', success:function(data) { alert(data); result = data; } }); return result; } document.write(showGetResult('test')); </script> 回答1 我想你想做的就是这个。 <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"
  • 找不到返回404的jQuery Ajax(Jquery ajax returning 404 not found)
    问题 我正在使用Ajax将表单数据和文件传递到PHP文件进行处理。 Javascript : $("form#applyform").submit(function(){ var data = new FormData(); jQuery.each($('#file')[0].files, function(i, file) { data.append('file-'+i, file); }); $.ajax({ url: 'ValidateApplication.php', data: data, cache: false, contentType: false, processData: false, type: 'POST', success: function(data){ alert(data); } }); } ValidateApplication.php确实存在。 如果我在网络浏览器中输入地址,则可以查看它,但是,当我提交表单chrome控制台时,它将返回404。 PHP与运行JavaScript的HTML页面位于同一文件夹中,因此我对为何不断获取404感到困惑。 更新 将POST更改为GET可以摆脱404错误,但会返回500 Internal Server Error 更新2 将表单的操作更改为=“ ValidateApplication.php”并按正常方式提交
  • 使用 jQuery AJAX 调用类方法?(Calling a class method with jQuery AJAX?)
    问题 我正在从 PHP AJAX 库 xajax 转移到 jQuery AJAX。 使用 xajax,我可以通过将公共类方法绑定到 javascript 函数名称(例如 $this->registerFunction('javascriptFunctionName', &$this, 'classMethodName'))来包含类方法中的所有 AJAX 调用。 我希望有一种方法可以用 jQuery AJAX 做类似的事情,我可以这样做: $('#myButton').click(function() { $.get('class|methodName', { parameter: value }, function(data) { if (data) { ... } else { ... } }); return false; }); }); 我知道您可以对 MVC 控制器方法进行 AJAX 调用,但不幸的是,我的旧产品不使用 MVC :-( 请告诉我有办法吗? 如果没有,有没有办法将调用映射到全局 PHP 函数? 回答1 要搭载车道所说的,您可能想要制作一个非常简单的 ajax 控制器并将所有内容路由到它: <?php class AjaxController { protected $_vars = null; protected $ajax = null; public
  • 从 Jquery AJAX 调用返回响应 [重复](Returning the response from an Jquery AJAX call [duplicate])
    问题 这个问题在这里已经有了答案: 如何从异步调用返回响应(43 个回答) 7年前关闭。 我写了一个函数,它必须检查用户名是否被占用。 现在,当我从另一个函数调用该函数时,并警告它的返回值: alert(checkusernameavailable('justausername')); 它说“未定义”。 我搜索了高低,但找不到我做错了什么。 我想它应该只返回 check.php 中的 php-echo,但它没有。 这是我写的函数: var checkusernameavailable = function(value) { $.ajax({ url: "check.php", type: "POST", async: false, cache: false, data: "username=" + value + "", success: function(response) { alert(response); return response; }, error: function() { alert('ajax error'); } }); } 我究竟做错了什么? 回答1 AJAX 调用是异步的,这意味着它们仅在操作完成后返回数据。 即方法checkusernameavailable从不返回任何信息(除非您在该方法本身内告诉它)。 您需要执行以下操作: // Just fire
  • Wordpress AJAX不起作用-响应0(Wordpress AJAX doesn't work - response 0)
    问题 我想在我的插件中添加AJAX支持,而这个简单的东西有很大的问题。 WordPress不允许我使用普通的AJAX,我需要使用WordPress版本。 在任何时候,WordPress函数(应该生成输出)都返回0。我认为原因是WP不会触发“函数”。 我试图强制该功能多次运行,但是我不知道我可以改进什么。 <?php public function widget( $args, $instance ) { $options = get_option('Free_Quotation_options'); ?> <script type="text/javascript" > jQuery(document).ready(function($) { var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; jQuery.ajax({ url: ajaxurl, type: 'POST', action: 'fqtag', data: { 'whatever': 'text' }, success: function (output) { $('#secondary').append(output); } }); }); </script> <?php add_action( 'wp_ajax_fqtag', 'fqtag' )
  • Wordpress 和 AJAX - 上传图片作为特色(Wordpress and AJAX - Upload image as featured)
    问题 我在前端表单中使用 wordpress 和 ajax,我需要支持处理和上传特色图像。 我的问题特别是关于特色图片。 我的 html 是这样的: <form id="msform" action="#" method="post" enctype="multipart/form-data"> //inputs of various nature <input type="file" name="main_image" id="main_image" multiple="false" value="" accept=".png, .jpg, .jpeg, .gif"/> <input type="submit" class="submit" value="Publish"/> </form> 我通过这个 jquery 将数据发送到一个 php 函数(遵循 Wordpress 方法): function apfaddpost() { var formData = $('#msform').serialize(); formData.append('main_image', $('#main_image')[0].files[0]); //here should be the problem jQuery.ajax({ type: 'POST', url: apfajax
  • jQuery 使用 jQuery 的 ajax 方法上传文件(无插件)(jQuery upload file using jQuery's ajax method (without plugins))
    问题 目前想实现不使用任何插件的图片上传。 我的上传表单看起来像这样 <form action="/Member/UploadPicture" enctype="multipart/form-data" id="uploadform" method="post"> <span> <div class="upload" id="imgUpl"> <h3>Upload profile picture</h3> <div class="clear5"></div> <input type="file" name="file" id="file" /> <button class="btn-bl" id="upComplete"><span>Upload</span></button> </div> </span> </form> 我的 jQuery 代码是: $('#upComplete').click(function () { $('#up').hide(); $('#upRes').show(); var form = $("#uploadform"); $.ajax({ type: "POST", url: "/Member/UploadPicture", data: form.serialize(), success: function (data) { alert(data)
  • JQuery ajax 函数工作但不能正确返回变量(JQuery ajax function works but can't return the variable correctly)
    问题 我有一个运行正常的函数 runAjax。 不幸的是,我正在努力返回我从 ajax 查询中获得的值。 ajax 函数将“contents”或“error” xml 标签内的返回值分配给变量“result”。 如果我在 ajax 函数中提醒结果变量,它会提醒正确的值(即,如果内容中的 xml 值是“已发布”,它会提醒已发布)。 但是,如果我警告 runAjax 函数的返回值,它会警告一个对象而不是内部变量“result”的值,在上面的例子中它是“published”。 function runAjax (data_obj){ return $.ajax({ url:"/ajax.php", dataType: "xml", data: data_obj, success: function(data) { // format result var xml; if (typeof data == "string") { xml = new ActiveXObject("Microsoft.XMLDOM"); xml.async = false; xml.loadXML(data); } else { xml = data; } var result; if($("error",xml).text()){ result = [$("error",xml).text()]; }
  • 使用jQuery使用参数调用PHP函数(call php function with arguments using Jquery)
    问题 我有一个php文件func.php ,其中定义了许多函数,比如: <? php function func1($data){ return $data+1; } ?> 我想使用ajax调用function func1 。 感谢您的帮助 回答1 您不能直接通过AJAX调用来调用PHP函数,但是您可以这样做: PHP: <? php function func1($data){ return $data+1; } if (isset($_POST['callFunc1'])) { echo func1($_POST['callFunc1']); } ?> JS: $.ajax({ url: 'myFunctions.php', type: 'post', data: { "callFunc1": "1"}, success: function(response) { alert(response); } }); 回答2 您应该使用jQuery这样通过ajax请求来调用php脚本: Javascript: $.ajax({ url: "script.php", data: { param1: "value1", param2: "value2" }, type: "GET", context: document.body }).done(function() { // your
  • How to properly implement a custom ajax
    In order to keep the logotext <div class="small-7 medium-4 columns logo"> and the menu <nav class="pagedMenu" role="navigation">,without clipping on page refresh or while the content is loading from a page to another, I am trying to implement this solution made by @Buzinas (special thanks). In a few more words: In header.php we have this script: <head> ... <script> function ajax(url, callback, method, params) { if (!method) method = 'GET'; var xhr = new XMLHttpRequest(); xhr.open(method, url); if (callback) xhr.addEventListener('load', function() { callback.call(this, xhr); }); if (params) {