现需要使用 jQuery 代码实现 ajax 请求,详细信息如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现需要使用 jQuery 代码实现 ajax 请求,详细信息如下相关的知识,希望对你有一定的参考价值。

请求的 url :carinfo.do
发送方式:post
发送数据:id 为 s1 的文本框的值
返回数据:json 格式
请求成功:将返回数据写入 id 为 s2 的文本框中
请求失败:弹出文本“系统错误”
请提供代码实现上述功能。

Jquery  的 $.post() 方法通过 HTTP POST 方式向服务器发送请求并获取返回的数据,可以实现ajax的提交、接收处理、返回;

例子:
$.post( 
        // 接收数据的php页面
        url : 'action.php',   
        // 传给PHP的数据,多个参数用&连接或者使用json格式数据:
        a:'value1',b:'value2',function(msg)
               
            // 这里是请求发送成功后的回调函数。        
            // msg是返回的数据
            if(msg.xx == xx)
            
                #处理情况一
            
            else
            
                #处理情况二
                 
        ,'json');// 默认返回字符串,设置值等于json则返回json数据  
        
把你上面的自己填写进去,就可以了,自己多动手,才会提高水平,真要出不来,追问我

参考技术A $.ajax(
type: 'POST',
url: 'carinfo.do',
data: "name":$("#s1").val(),
success: function(data)
$("#s2").val(data);
,
error : function()
alert('系统错误')
,
dataType: 'json'
);

如何使用 Symfony 和 Jquery 发出 POST Ajax 请求

【中文标题】如何使用 Symfony 和 Jquery 发出 POST Ajax 请求【英文标题】:How to make a POST Ajax request with Symfony and Jquery 【发布时间】:2013-10-22 21:51:28 【问题描述】:

我需要在我的 symfony 项目中存储一些地图参数,为此我需要在我的视图中实现一些 Ajax,以便能够将一些信息传递给控制器​​。

我阅读了文档,尝试编写一些代码,但我无法使其工作。而且 Ajax 调试起来真的很痛苦。 这是控制器部分:

 /**                                                                                   
 * @Route("/ajax", name="_recherche_ajax")
 */
public function ajaxAction()    

    $isAjax = $this->get('Request')->isXMLHttpRequest();
    if ($isAjax)          
        return new Response('This is ajax response');
    
    return new Response('This is not ajax!', 400);

还有 JS:

map.on('zoomend', function(e) 
    // use callback e variable
    console.log('zoom: ' + e.target.getZoom());

    $.ajax(
        type: "POST",
        url: "/recherche/ajax",
        data: 
           zoom: e.target.getZoom()
        ,
        dataType: "json",
        success: function(response) 
            console.log(response);
        
    );

);

我检查了 url recherche/ajax 它确实存在并按预期返回“这不是 Ajax”。但是 console.log 没有返回任何值...

这是正确的做法吗?

编辑: 看起来控制器无法处理 POST 请求。我尝试将注释修改为:

 /**                                                                                   
 * @Route("/ajax", name="_recherche_ajax")
 * @Method("GET", "POST")
 */

但它会返回:

([Semantical Error] The annotation "@Method" in method MySite\SiteBundle\Controller\RechercheController::ajaxAction() was never imported. Did you maybe forget to add a "use" statement for this annotation?) 

【问题讨论】:

是响应输出undefined还是什么都没有输出? 我的控制台一无所有... 这很可能是由于 PHP 中的FATAL 错误。尝试直接在浏览器中输入ajax请求地址(我知道,不是POST),看看是否有Symfony错误... @x_vi_r 在调试器中打开网络选项卡,处理 Ajax 请求并检查浏览器给出的响应。检查是否触发了事件,如果是,请查看是否返回了500 StatusCode。如果是这样,您可以验证您的 app/logs 文件夹中发生了什么。 然后在文件顶部添加use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 【参考方案1】:

试试这个,

/**                                                                                   
 * @Route("/ajax", name="_recherche_ajax")
 */
public function ajaxAction(Request $request)    

    if ($request->isXMLHttpRequest())          
        return new JsonResponse(array('data' => 'this is a json response'));
    

    return new Response('This is not ajax!', 400);

如果您发送 Ajax 请求,您需要返回 json/plaintext/xml 数据,而不是整个 Response 对象。

PS:不要忘记为RequestJsonResponse添加使用声明

编辑:正如您添加的错误消息所说,您需要使用以下方法导入注释@Method

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

【讨论】:

我想从控制器调用实际的 ajax 调用。请提出任何建议。 您可以将condition="request.isXmlHttpRequest()", 添加到@Route 以限制匹配ajax 请求。类似于@Method 的工作方式。见:symfony.com/doc/current/routing/conditions.html【参考方案2】:

我查看了整个互联网,但没有找到类似问题的任何解决方案。但是我找到了-> 我既没有控制器问题,也没有 javascript/jquery/ajax 和安全问题。 它在……等待它……在 HTML 中。 我必须将 type="button" 添加到 html 标签中,否则整个页面都在刷新。 调试目的浪费了 4 个小时。但吸取了教训。

如何调试问题? 1.检查ajax是否在客户端发送post和匹配的post路由。 Firefox -> f12 -> 网络 -> 观看 POST 事件 2. 检查 symfony profiler(非常有用的工具!) -> /app_dev.php/ (dev environment) -> Get Request/Response submenu end take last 10, if You see the POST route close check if its return code and参数(你不会看到响应,如果它的设置不是 HTML 响应) 3. 在您的控制器中执行一些操作,可以检查此路由内的脚本是否已执行。如果是这样,您在服务器端(控制器)或客户端(twig/ajax/html)都看不到响应 4. 代码示例:

html 中的按钮(这是我的问题)

<button name="button" id="button" class="button" type="button" value="100"> Click me </button> 

html 或其他包含的 js 文件中的 Ajax:

function aButtonPressed()
        $.post('path('app_tags_sendresponse')',
            data1: 'mydata1', data2:'mydata2',
            function(response)
                if(response.code === 200 && response.success)
                    alert('success!');
                
                else
                    alert('something broken');
                
            , "json");
    

现在.. 服务器端。控制器:

namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class JsonApiController extends Controller
    /**
         * @Route("/api/programmers")
         * @Method("POST")
         */
        public function sendResponse()
        
            if(isset($_POST['data1']))
                $json = json_encode(array('data' => $_POST['data1']), JSON_UNESCAPED_UNICODE);
                file_put_contents("test.json", $json);
                return new JsonResponse($json);
            
            return new Response('didn't set the data1 var.');
        
    

File put contents 在 web 目录中创建新文件。如果匹配并创建了文件,则意味着您匹配了路由,但没有得到响应

【讨论】:

以上是关于现需要使用 jQuery 代码实现 ajax 请求,详细信息如下的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中的ajax问题

JQuery中使用Ajax实现诸如登录名检测等异步请求Demo

如何利用jquery ajax实现循环的ajax请求

使用 ajax、php 和 json 服务器发布请求时出现错误 404

Ajax拓展

.net MVC中Jquery实现AJAX详解